北京理工大学-计算机学院-计算机专业-大三-《操作系统》课件-第7-8章Linux进程管理_第1页
北京理工大学-计算机学院-计算机专业-大三-《操作系统》课件-第7-8章Linux进程管理_第2页
北京理工大学-计算机学院-计算机专业-大三-《操作系统》课件-第7-8章Linux进程管理_第3页
北京理工大学-计算机学院-计算机专业-大三-《操作系统》课件-第7-8章Linux进程管理_第4页
北京理工大学-计算机学院-计算机专业-大三-《操作系统》课件-第7-8章Linux进程管理_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第7章 Linux进程管理2 现代操作系统允许一个进程有多个执行流,即在相同的地址空间中可执行多个指令序列。每个执行流用一个线程表示,一个进程可以有多个线程。Linux使用轻量级进程实现对多线程应用程序的支持,一个轻量级进程就是一个线程。37.1 Linux进程组成在用户态运行时,进程映像包含代码段、数据段、堆、用户栈。进程在核心态运行时,访问内核的代码段和数据段,并使用各自的核心栈。进程描述符(task_struct):描述进程的数据结构。 P1464task_structthread_info当前进程基本信息mm_struct指向进程的虚拟内存描述符thread_struct保存进程硬件

2、上下文files_struct指向该进程打开文件信息signal_struct所接收的信号tgid线程组标识符,线程组领头进程的PID5进程核心栈0 x015fbfff0 x015fb0000 x015fa8780 x015fa0340 x015fa000thread_info结构thread_info进程描述符(task_struct)核心栈esptask占用两个连续物理页框 进程核心栈、thread_info结构和进程描述符之间的关系6 由于esp寄存器存放的是核心栈的栈顶指针,内核很容易从esp寄存器的值获得正在CPU上运行进程的thread_info结构的地址。进而获得进程描述符(PC

3、B)的地址。进程刚从用户态切换到核心态时,其核心栈为空,只要将栈顶指针减去8k,就能得到thread_info结构的地址。7 进程的状态可运行状态:进程正在或准备在CPU上运行的状态。可中断的等待状态:进程睡眠等待系统资源可用或收到一个信号后,进程被唤醒。 不可中断的等待状态:进程睡眠等待一个不能被中断的事件发生。如进程等待设备驱动程序探测设备的状态。暂停状态;跟踪状态 ;僵死状态 ;死亡状态 87.2 Linux进程链表传统进程链表 所有进程链表:链表头是0号进程 可运行进程链表:按照它们的优先级可构建140个可运行进程队列。子进程链表 兄弟进程链表等待进程链表。互斥等待访问临界资源的进程;

4、非互斥等待的进程,所有进程都被唤醒。9PID哈希表(为了加速对进程的检索)PID TGID PGID SID 0 1 2 3pid_hashTGID表 0 70 2047nr=4351pid_chainpid_listpids1进程描述符nr=4351pid_chainpid_listpids1进程描述符nr=4351pid_chainpid_listpids1进程描述符线程组链表同一哈希表项的进程链 表nr:线程组号,即线程组领头进程的PID pid_chain:链接同一哈希表项的进程PID;进程pidTGID:线程组领头进程的pidPGID:进程组领头进程的pidSID:会话领头进程的pi

5、dnr=246pid_chainpid_listpids1进程描述符107.3 Linux进程控制创建进程的函数fork()、clone()、vfork()。创建子进程函数fork():创建成功之后,子进程采用写时复制技术读共享父进程的全部地址空间,仅当父或子要写一个页时,才为其复制一个私有的页的副本。创建轻量级进程函数clone():实现对多线程应用程序的支持。共享进程在内核的很多数据结构,如页表、打开文件表等等。vfork():阻塞父进程直到子进程退出或执行了一个新程序为止。110号、 1号0号进程就是一个内核线程,0号进程是所有进程的祖先进程,又叫idle进程或叫做swapper进程。每

6、个CPU都有一个0号进程。 1号进程是由0号进程创建的内核线程init,负责完成内核的初始化工作。在系统关闭之前,init进程一直存在,它负责创建和监控在操作系统外层执行的所有用户态进程。12进程撤销exit()系统调用只终止某一个线程。exit_group()系统调用能终止整个线程组。父进程先结束的子进程会成为孤儿进程,系统会强迫所有的孤儿进程成为init进程的子进程。Init进程在用wait()类系统调用检查并终止子进程时,就会撤销所有僵死的子进程。137.4 Linux进程切换进程切换只发生在核心态。在发生进程切换之前,用户态进程使用的所有寄存器值都已被保存在进程的核心栈中。之后大部分寄

7、存器值存放在PCB的类型为thread_struct的 thread字段(进程硬件上下文P147)里,一小部分仍在核心栈中。进程切换:第一步,切换页目录表以安装一个新的地址空间;第二步,切换核心栈和硬件上下文。由schedule()函数完成进程切换。P155147.5 Linux进程调度系统采用可抢先式的动态优先级调度方式。无论进程处于用户态还是核心态运行,都可能被抢占CPU。进程调度类型:先进先出的实时进程、时间片轮转的实时进程、普通的分时进程。实时进程的基本优先数为199,而分时进程和批处理进程的基本优先数为100139。15进程调度所涉及的数据结构每个处理机都有自己的可运行进程队列,存放

8、在一维数组runqueues中。每个处理机对应数组中的一项。P157-158活动进程链表:没有用完自己的时间片。过期进程链表:已经用完了自己的时间片。当活动进程都过期后,过期进程才可运行。避免低优先级进程没有机会运行(进程饥饿)。活动进程有140个优先级队列,和队列位图。过期进程也有140个优先级队列,和队列位图。167.6 内核同步UNIX内核的各个组成部分并不是严格按照顺序依次执行的,而是采用交错方式执行的,以响应来自运行进程的请求和来自外部设备的中断请求。互斥访问内核共享数据结构。内核使用的同步技术包括:每CPU变量、原子操作、优化和内存屏障、自旋锁、读拷贝更新、信号量、禁止本地中断、禁

9、止和激活可延迟函数。17第8章 Linux 存储器管理 北京理工大学计算机学院188.1 进程地址空间的管理32位机,每个进程的地址空间为4GB。进程的私有地址空间是前3G,进程的公有地址空间是后1G的内核虚空间。内核1GB虚空间中的前896MB用来映射物理内存的前896MB,因此前896MB的内存物理地址等于内核虚地址减去0 xc0000000。后128MB的虚空间实现对超过896MB的物理内存的映射。198.1.2 虚拟内存区域需用一组虚拟内存区域描述符vm_area_struct来描述进程地址空间的使用情况。类似于Windows的虚拟地址描述符VAD20vm_area_struct P1

10、65struct vm_area_struct struct mm_struct * vm_mm; 虚拟内存描述符unsigned long vm_start; /*起始地址*/unsigned long vm_end; /*结束地址*/struct vm_area_struct *vm_next; /*单链表*/struct rb_node vm_rb; /*红-黑树*/struct file * vm_file; 映射文件时指向文件对象21红黑树红黑树是一棵排好序的平衡二叉树。必须满足四条规则:树中的每个节点或为红或为黑;树的根节点必须为黑;红节点的孩子必须为黑;从一个节点到后代诸叶子节点

11、的每条路经,都包含相同数量的黑节点,在统计黑节点个数时,空指针也算作黑节点。这四条规则保证:具有n个节点的红黑树,其高度至多为2*log(n+1)。22红黑树502010(a)红节点黑节点806550(b)10515407020907090805154023红黑树050208010400070090000rb_parentvm_startrb_leftrb_rightvm_nextmm_rbmmap65001500500单链表红黑树图中的各节点描述248.1.3 虚拟内存描述符struct task_struct / PCB struct mm_struct *mm; 25mm_struct

12、P168struct mm_struct struct vm_area_struct *mmap; struct rb_root mm_rb; /*指向红-黑树的根*/pgd_t *pgd; /*指向页目录表*/atomic_t mm_users; /*次使用计数器*/atomic_t mm_count; /*主使用计数器*/struct list_head mmlist; 双向链表unsigned long start_code, end_code; /*可执行代码所占用的地址区间*/;26主、次使用计数器mm_users记录共享mm_struct的轻量级进程数。内核线程不拥有mm_stru

13、ct 。若把mm_struct暂时借给一个内核线程使用,则mm_count值增1。进程结束,mm_users和mm_count都为0时,这个mm_struct才能被释放。278.2 物理内存管理页框0由BIOS使用,存放加电自检期间检查到的系统硬件配置。从0 x000a0000到0 x000fffff的物理地址通常留给BIOS例程。Linux跳过RAM的第一个MB的空间。页框大小为4KB。所有页框描述符struct page存放在mem_map数组中。28页框描述符 P171struct page unsigned long flags; /*页框状态标志P172*/atomic_t _cou

14、nt; /*页框的引用计数*/atomic_t _mapcount; /*对应的页表项数目*/unsigned long private; /*空闲时由伙伴系统使用*/struct address_space *mapping;用于页高速缓存pgoff_t index; 在页高速缓存中以页为单位偏移struct list_head lru; 链入活动页框链表或非活动.void *virtual; /*页框所映射的内核虚地址*/; P17129mappingmapping字段的结构类型为address_space,它是页高速缓存的核心数据结构,和文件的inode结构有关联。属于同一个文件的缓存页

15、被链入同一个address_space对象中。图11.3 实现文件内存映射的各数据结构之间的关系address_space对象inode对象file对象structpagestructpagestructpagestructvm_area_structfile对象i_mapping页框f_mapping页框页框f_mappingpage_treei_mmap文件映像vm_filevm_filevm_pgoffvm_pgoffmappingindexmappingindexindexhoststructvm_area_struct31内存的3个管理区Linux把内存划分为3个管理区zone。 Z

16、ONE_DMA:包含低于16MB的常规内存页框。用于对老式的基于ISA设备的DMA支持。ZONE_NORMAL:包含高于16MB且低于896MB的常规内存页框。ZONE_HIGHMEM:包含从896MB开始的高端物理页框。内核不能直接访问这部分页框。在64位体系结构上,该区总是空的。32内存区描述符 P173struct zone unsigned long free_pages; 空闲页框数struct per_cpu_pageset pagesetNR_CPUS;/*每CPU页框高速缓存,以满足CPU对单个页框的请求*/struct free_area free_area11; /*伙伴系

17、统中的11个空闲页框链表*/struct list_head active_list; /*活动页框链表,存放最近正被访问的页框*/ struct list_head inactive_list; /*非活动页框链表,存放最近未被访问的页框*/.;33 页框分配器负责处理对连续物理页框的分配请求。伙伴算法把空闲页框组织成11个链表,分别链有大小为1,2,4,8,16,32,64,128,256,512和1024个连续空闲页框。 34伙伴系统lruprivate=312481632641282565121024lru起始页框描述符private=3lru起始页框描述符private=335伙伴系

18、统假设要请求一个具有8个连续页框的块,该算法先在8个连续页框块的链表中检查是否有,如果没有,就在16个连续页框块的链表中找,如果找到,就把这16个连续页框分成两等份,一份用来满足请求,另一份插入到具有8个连续页框块的链表中;如果在16个连续页框块的链表中没有找到,就在更大的块链表中查找。直到找到为止。368.3 slab管理伙伴系统以页框为单位,适合于对大块内存的分配请求。slab分配器为只有几十或几百个字节的小内存区分配内存。如,file对象。37slab分配器从页框分配器获得几组连续空闲页框slab分配器为不同类型的对象生成不同的高速缓存,每个高速缓存存储相同类型的对象。高速缓存由一连串的slab构成,每个slab包含了若干个同类型的对象。对象slab对象slab高速缓存高速缓存388.5 地址转换32位处理机普遍采用二级页表模式,为每个进程分配一个页目录表,页表一直推迟到访问页时才建立,以节约内存。 虚地址分成3个域:页目录索引(前10位)、页表索引(中10位)和页内偏移(后12位)。Linux系统的页目录项和页表项的数据结构相同。 页目录表页框页表Cr33122 21012 11虚拟地址OffsetTableDirect

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论