操作系统实例二:Linux.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实例二:Linux

8.1 Linux的进程管理 8.1.2 Linux的进程调度 在Linux系统中系统调度的基本单位是进程,当进程调度时机成熟时,进程调度程序在多个进程间进行合理选择,为条件最佳的进程分配处理机并使之投入运行。 Linux使用进程调度统一处理进程和内核线程,所以通过进程调度就可以得知线程调度的具体情况。 Linux中进程调度涉及了3方面:调度方式、调度时机和调度策略。 8.1.3 Linux进程间的通信-消息队列 Linux为进程间的通信提供了多种机制,常见的有信号、信号量、管道、消息队列和共享内存储区等。信号用于一个进程向另一个进程发出通知;而信号量则用于进程间取得同步;管道、消息队列和共享存储区都用于在进程间传递数据。 消息队列是进程间的一种异步通信方法。“异步”即发送消息的进程在消息发出之后,不必等待接收进程作出反应,就可以去做其他的事情了。Linux 对消息的长度没有限制。消息队列使用完毕后,应该予以释放(即删除)。 1. 消息队列的数据结构 一个消息队列是一个由消息缓冲区所构成的链表,它允许一个或多个进程从中读出或写入消息。 采用这种通信机制时,Linux需维护一个消息队列数组msgque,每个数组元素是一个描述某个消息队列的msqid_ds结构的结构体,Linux通过该结构管理消息队列。当创建新的消息队列时,系统将从内存中申请分配一个由msqid_ds结构描述的内存块,并将它们插入到数组msgque中。 2. 消息队列相关的系统调用 1)创建新消息队列系统调用newque( ) 2)删除消息队列系统调用freeque( ) 3)发送消息系统调用msgsnd( ) 4)接收消息系统调用msgrcv( ) 1.虚拟地址空间 在Pentium计算机上,Linux系统采用3位虚拟地址,因而每个用户的虚拟地址空间可达到4 GB,其中高地址的1 GB是系统空间,低地址的3 GB是用户空间。 进程实际用到的虚拟地址空间由若干个连续的区域构成。Linux系统采用虚存段和链表来表示。每个虚存段表示进程的一段连续区域,虚存段之间不一定是连续的。每个进程通常占用几个虚存段,分别为代码段、数据段和堆栈段等,虚存段用单链表来管理。 2.页表管理 Linux系统采用请求页式技术管理虚拟内存。在Linux中,采用二级页目表的形式,即把页表分为二级结构:页目录表(PGD)和页表(PTE)。每个进程有一个页目录表,其大小为4 KB,以4 B为一个表项,共包含1 024个表项,每个页目录表项指向页表中的一页。同样,每个页表大小也为4 KB,包含1 024个表项,每个页表项指向该进程的一个页面。 3.地址转换 当调用fork()创建一个进程时,系统为之建立一个PCB,称为task_struct结构,其中包含了一个用于描述该进程存储管理相关信息的mm_struct数据结构,页目录表的起始地址存放在mm_struct中。 每次将虚拟地址转换成物理地址时,都要首先通过mm_struct中的指针pgd找到该进程的页目录表;然后根据页目录在页目录表中找到相应的表项,从中得到页表的入口地址;其次根据页号在页表中找到相应的表项,从中得到该页在内存中的物理块号;最后根据页内位移量就可以访问所需内容。 8.2.2 管理虚拟存储空间的数据结构 Linux在管理进程虚拟空间时定义了虚存段(vma)。 虚存段是进程一段连续的虚存空间,在这段虚存空间里,所有单元拥有相同特征。这样分割是因为每个虚拟内存区域的来源可能不同,有的可能来自可执行映像,有的可能来自共享库等,每一个虚存段的处理操作有所不同。 Linux用数据结构vm_area_struct描述了虚存段的属性,它主要包括: (1)vma在虚存中的起始地址和终止地址。 (2)vma的内容来源。 (3)一系列对vma的操作例程。 8.2.3 管理内存空间的数据结构 Linux使用位示图的方式记录所有物理内存的空间情况。位示图实际为表,该表在系统初始化时,由free_area_init()函数创建。 在Linux系统内核定义了bitmap表,该表的每一项描述某一种页块的信息。 free_area数组的每一项包含两个元素:list和map,list是一个双向链表的头指针,指向空闲页块的起始物理页编号,而map指针指向一个记录页块组合分配情况的位示图。如果第N个页面是空闲的,则该位示图的第N个位置为0;在该页面块中只要有一个页被占用,

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档