欢迎来到天天文库
浏览记录
ID:59031224
大小:642.50 KB
页数:53页
时间:2020-09-26
《现代操作系统 Chapter ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Chapter7Casestudy:LinuxContentsLinux内核结构Linux的进程管理Linux的进程调度Linux的内存管理7.1Linux内核结构7.2Linux的进程管理一般来说,Linux中的进程都具备以下四要素:有一段程序供其执行。有起码的“私有财产”,这就是系统专用的系统堆栈空间。有“户口”,这就是在内核中的一个task_struct数据结构(在操作系统教科书中常称为PCB)。有独立的存储空间,意味着拥有专有的用户空间。注:缺了其中任何一条就不成其为“进程”。如果只具备了前面3条而缺第4条,那就称为“线程”。特别地,如果完全没有
2、用户空间,就称为“内核线程”,而如果共享用户空间则就称为“用户线程”。task与processLinux系统中的“进程”(process)和“任务”(task)是同一个意思,在内核代码中也常混用这两个名词。7.2.1进程描述符及任务结构在内核中,进程描述符是一个名为task_struct的结构体,用于保存进程的属性和其他信息,它在include/linux/sched.h中定义。内核用双向循环链表task_list存放所有进程描述符;同时借助全局变量current保存当前运行进程的task_struct。进程描述符进程描述符必须保存的信息类型有:进程的属
3、性进程间的关系进程的内存空间文件管理信号量管理进程的可信度资源限制与调度相关的域7.2.2进程状态task_struct结构中的state域描述了进程的当前状态。系统中的每个进程都必然处于几种进程状态之一。其具体定义见sched.h。#defineTASK_RUNNING0#defineTASK_INTERRUPTIBLE1#defineTASK_UNINTERRUPTIBLE2#defineTASK_STOPPED4#defineTASK_TRACED8#defineEXIT_ZOMBIE16#defineEXIT_DEAD32进程状态TASK_RUN
4、NING可执行状态,表示这个进程可以被调度执行而成为当前进程。当进程处于这样的可执行状态时,内核就将该进程的task_struct结构通过其队列头run_list挂入一个“运行队列”。TASK_INTERRUPTIBLE进程睡眠,可因“信号到来”而被唤醒TASK_UNINTERRUPTIBLE进程深度睡眠,不受信号干扰TASK_STOPPED挂起状态,主要用于调试目的TASK_ZOMBIE进程已经结束,但资源未释放,进程结构还在(进程已经“去世”但“户口”尚未注销)进程状态转换7.2.3进程创建Linux将进程的创建与目标程序的执行分成两步:第一步:从已
5、经存在的“父进程”复制出一个“子进程”。复制出来的子进程有自己的task_struct和系统空间堆栈,但与父进程共享其它所有的资源。Linux为此提供了两个系统调用:fork()和clone()。第二步:读取可执行文件并将其载入地址空间开始运行。Linux为此提供了一个函数族:exec()。fork()与clone()的区别fork()是全部复制,父进程所有的资源全都通过数据结构的复制“遗传”给子进程。clone()则可以将资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享。在极端的情况下,一个进程可以clone()出一个线程。f
6、ork()是无参数的,clone()是带有参数的。写时拷贝(copy_on_write)传统的fork()系统调用直接把所有的资源复制给新创建的进程。——缺点:效率低下Linux的fork()使用写时拷贝来实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。新创建进程时,内核并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝;只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。写时拷贝写时拷贝技术使地址空间上的页的拷贝被推迟到实际发生写入的时候,在页根本不会被写入的情况下(如fork()后立即调用exec()),它们就无需复制
7、了。一般情况下,进程创建后都会马上运行一个可执行的文件,这种优化可以避免拷贝大量根本就不会被使用的数据。7.3Linux的进程调度调度程序是内核的组成部分,它负责选择下一个要运行的进程。调度程序的基本工作:在一组处于可运行状态的进程中选择一个来执行。Linux提供抢占式的多任务模式。7.3.1调度策略(policy)调度策略决定调度程序在何时让什么进程运行。(1)I/O消耗型和处理器消耗型进程I/O消耗型进程:进程的大部分时间用来提交I/O请求或是等待I/O请求。这样的进程经常处于可运行状态,但通常每次运行时间很短。处理器消耗型进程:它把时间大多用在执
8、行代码上。对于处理器消耗型进程,调度策略是尽量降低它们的运行频率。调度策略调度策
此文档下载收益归作者所有