文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>基础知识

基础知识

时间:2009-05-15  来源:makeourfuture

异步操作(asynchronous operation):由于很多计算机系统时间会在不可预测的时间、已不可预测的顺序发生而产生的。

并发(concurrency):指相同的时间桢内对资源的共享。

通信(communication):将一个实体的信息传送给另一个实体。

多道程序设计(multiprogramming):是指有多个进程准备好要执行。操作系统挑选一个已经准备好的进程来执行。当那个进程需要等待资源时(一次按键或一次磁盘访问),操作系统保存从停止处恢复此进程所需要的所有信息,并选择另一个准备好的进程执行。这里很容易看出多道程序设计可能是如何实现的。一次资源请求(read或者write)会引起一次对操作系统的的请求(即一次系统调用)。系统调用(system call)是对操作系统服务的一次请求,它会使正常的CPU周期中断,并将控制权交给操作系统。然后,操作系统就可以切换到另一个进程上去了。

例:
   解释磁盘I/O请求是怎样允许操作系统运行另一个进程的?

   答案:
   大多数设备都是有操作系统而不是由应用程序处理的。当一个应用程序执行读磁盘的操作时,调用向操作系统发出请求来实际执行这个操作。
   现在,操作系统拥有控制权。它可以向磁盘控制器发出命令,开始根据应用程序的请求检索磁盘块。但是,由于磁盘检索在很长一段时间内都完成不了,操作系统就将应用程序进程放入一个等待I/O完成的进程队列,并启动另一个已经准备好要运行的进程。最终,磁盘I/O得到结束时,磁盘控制器会终端CPU的指令周期。那时,操作系统重新获得控制权,并且可以选择是继续运行当前的进程还是允许原来的进程运行。

侵入带来的缓冲区溢出
   本节简要解释缓冲区溢出以及如何利用他来攻击计算机系统。当程序将数据拷贝到一个没有为其分配足够空间的变量中去的时候,就会发生缓冲区溢出(buffer overflow)。
  
   下面代码有缓冲区溢出可能。

char buf[80];

printf("Enter your name:");
scanf("%s",buf);

   为了解决这种潜在的溢出,你首先想到的办法可能是把buf扩大一些,比如说,1000个字节。什么人的名字会有那么长呢?即使用户决定输入一个很长的字符串,除了那些最固执的用户外,1000个字节也应该够大了。但是,不论你最终选择的长度是多少,这段代码还是有可能会出现缓冲区的溢出。其实,用户只需要简单地将标准输入重新定向到一个任意大的文件就行了。
   
   下面代码显示了解决这个问题的一种简单的办法。格式的规则将用户输入的字符串长度跟定在小于变量长度的范围内,并且为字符串结束符留有空间。程序最多向buf中读入79个字符,但在遇到空格字符的时候会听下来。如果用户的输入多余79个字符,程序会在随后的输入语句中读入额外的字符。

    
char buf[80];

printf("Enter you name:");
scanf("%79s",buf);
相关阅读 更多 +
排行榜 更多 +
蓝猫天气

蓝猫天气

生活实用 下载
手里剑冲刺3D

手里剑冲刺3D

休闲益智 下载
儿童英文绘本

儿童英文绘本

学习教育 下载