Linux基础教程(清华课件)2

Linux基础教程(清华课件)2

ID:37152667

大小:2.77 MB

页数:152页

时间:2019-05-19

Linux基础教程(清华课件)2_第1页
Linux基础教程(清华课件)2_第2页
Linux基础教程(清华课件)2_第3页
Linux基础教程(清华课件)2_第4页
Linux基础教程(清华课件)2_第5页
资源描述:

《Linux基础教程(清华课件)2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、上述两种措施仍然没有得到足够的空闲页面时,系统就要对所有进程进行扫描,寻找适合换出的候选进程。好的候选进程应该有一个或多个可以丢弃或换出的页面,系统选择其中部分页面丢弃或换出。Linux系统采用记龄(aging)置换算法。Linux系统根据访问次数来决定是否适合换出,优先换出那些很长时间没有访问的页面。与前两种途径相比,换出或者丢弃其他进程占用的页面的效率最低。总的来看,请求页式存储管理方法在进程建立时只分配少量内存,通过页面的交换来保证进程运行的时候能够得到需要的页面,可以同时在内存中安排多个进程

2、。但是,内存利用率的提高是以牺牲系统时间开销为代价换来的。4.3Linux进程调度Linux系统中同时在内存中安排多个进程,这些进程相互之间竞争处理机的使用权。系统的低级调度,即进程级调度就是要按照一定的策略,从所有处于就绪状态的进程中选择最应该执行的进程,把CPU分配给它,开始执行。Linux系统的内核级线程也按照进程来对待,使用进程调度统一处理进程和内核级线程。4.3.1初始化过程及进程树我们以Intel386系列计算机为例,介绍Linux系统的启动过程,现假定系统已经完成了正常安装。打开计算机

3、电源,计算机首先从固化在主板ROM中的BIOS开始启动,BOIS对计算机的硬件进行一系列的检测,然后从指定设备的指定位置,把bootloader读入系统内存并把控制权转交给bootloader,接着,在bootloader的控制下,系统启动代码被读入内存并进行初始化工作,控制权转交给系统初始化代码后,引导整个操作系统进入内存并控制整个系统,设置各种表格和数据结构,初始化可运行队列的时候建立系统的0号进程,然后创建系统最初的进程——init进程,该进程的进程号为1。init进程启动内核交换线程等系统内

4、核线程,然后根据系统提供的参数,启动相应的终端管理进程,在每一个终端屏幕上显示login字样,等待用户的登录,整个启动过程到此结束,参看图4.3。用户登录过程中,init进程启动login进程对用户的账号和密码进行验证,通过之后,由login进程启动shell命令解释进程,为用户提供操作系统的接口,接受用户的输入,解释执行用户命令,执行过程中又会创建新的进程。图4.3Linux系统启动过程Linux系统的所有进程共同构成一个完整的进程树,如图4.3所示。从init进程开始,init进程是所有其他进程

5、的祖先。init产生终端管理进程mingetty,mingetty产生login,login产生用户的shell进程,然后shell产生其他用户进程,因此,其他所有进程都是由init或者它的子孙创建而来。同样,在进程结束之后,父进程也要负责该进程的最后回收工作,如果某一个进程创建了子进程之后,由于某种原因先于子进程终止,由它创建的子进程成为孤儿进程,孤儿进程的祖父进程就要负责回收工作,依此类推。最后,在系统要关机之前,init进程还要负责结束所有的进程,卸载所有文件系统并终止处理器的指令执行。4.3

6、.2进程的组织为了管理进程,Linux系统采用多种方式来组织处于各种状态的进程。系统中每创建一个新的进程,就给它分配一个进程控制块(PCB),PCB是系统感知、控制进程的静态实体。系统访问PCB的频率非常高,因此所有进程的PCB都直接存放在物理内存中。Linux系统中使用一个称为task的数组来保存所有PCB的指针,Linux通过task数组来管理系统中所有的进程。每一个进程都有一个惟一标识自己的进程号PID,进程号和进程在task数组中的位置(数组元素的下标)之间是不同的。同时,系统中所有的进程还

7、构成一个双向循环队列,整个队列通过进程控制块中的两个指针next-task和prev-task来维护。某个进程在整个进程树中的位置,也通过PCB中指针描述。为了方便进程的调度,系统把所有可运行的进程组织成一个可运行队列,系统通过当前(current)指针来区别就绪状态和执行状态,每一个CPU都有一个当前指针,指向正在使用该CPU的进程。可运行队列也是一个双向循环队列,队列中指向前后接点的指针同样存放在PCB中,它们是next-run和prev-run。系统的调度函数根据一定的规则,查找整个可运行队列

8、,在其中寻找最值得执行的进程,给它(或它们)分配CPU,投入执行。Linux系统内部把所有进程分为三类,空闲线程、内核线程和用户进程。空闲线程是系统中一个特殊的具有标志作用的进程,它是task数组的0号元素task[0],它的进程号也是0,在源代码中记作init-task,只有当整个系统中没有进程可以运行时,空闲线程才会执行,它始终位于系统可运行队列中,也是该队列的头结点,同时它也是所有进程组成的队列的头结点。内核线程也是比较特殊的进程,它处于核心态,没有虚拟地址

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。