第5章-进程与内存管理实例要点分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
这是特殊的过程调用 系统工作在核心态 利用系统调用,动态请求和释放系统资源,完成与硬件相关的工作以及控制程序的执行等 每个操作系统都提供许多种系统调用。 (2)系统调用的方式 为了保证OS不被用户程序破坏,不允许用户程序访问OS的系统程序和数据。 那么,如何得到系统服务呢? 通过执行一条陷入指令(或称访管指令),由用户态切换到核心态,转入执行相应的处理程序(陷入处理程序)。 说明: 系统调用是一个低级过程,只能由汇编语言直接访问; 系统调用是操作系统提供给程序设计人员的唯一接口; C语言为每个系统调用提供对应的标准库函数,应用程序可以通过C语言库函数来使用系统调用。 (3)系统调用的处理过程 怎样实现用户程序和系统程序间的参数传递? 常用的3种实现方法: ①由陷入指令自带参数 陷入指令的长度是有限的,且还要携带系统调用功能号,只能自带有限的参数 ②通过有关通用寄存器来传递参数 这些寄存器应是系统程序和用户程序都能访问的,由于寄存器长度较短,无法传递较多的参数 ③大多在内存中开辟专用的堆栈区来传递参数 read (fd, buffer, nbytes) (4)系统调用的分类 将系统调用分为两大类:系统自身所需要的;作为服务提供给用户的 进程管理系统调用 内存管理系统调用 文件和目录管理系统调用 I/O设备管理系统调用 相同点: 改变指令执行流程 是为实现某个特定功能而设计的,可多次调用 执行完成后需要返回 ① 运行在不同的系统状态 一般的用户过程运行在用户态 系统调用运行在核心态 ② 返回问题 在抢占式调度的系统中,系统调用在返回时,OS将对所有就绪进程进行优先级分析。如果调用进程仍有最高优先级,则返回到调用进程执行,否则,引起重新调度,让优先级最高的进程执行。此时,系统把调用进程放入就绪队列。 ③嵌套或递归调用 对于系统调用,一般不允许在同一个进程中发生嵌套或递归(不同进程可以重入同一个系统调用) ④ 进入和返回方式不同 利用int或trap指令进行系统调用; 利用call指令进入普通的过程调用; 一般过程的返回用ret指令 系统调用的返回用iret指令 核心态与用户态的转换由系统在int指令与iret指令内部自动完成,没有用一条单独的专门指令,好处在于:有效地防止在核心态下执行用户程序 INT指令和IRET指令的执行过程中 要处理程序状态字PSW INT指令中要保存用户程序的老PSW IRET指令中要在返回用户程序前恢复用户程序的老PSW 时间配额是一个线程从进入运行状态到Windows 检查是否有其他优先级相同的线程需要开始运行之间的时间总和 一个线程用完了自己的时间配额时,如果没有其它相同优先级线程,Windows将重新给该线程分配一个新的时间配额,并继续运行 时间配额不是一个时间长度值,而一个称为配额单位(quantum unit)的整数 线程调度 (3)线程优先级 Windows 2000/XP内部使用32个线程优先级,范围从0到31,它们被分成以下三类: 16个实时线程优先级(16-31) Windows 并不是通常意义上的实时,并不提供实时操作系统服务 15个可变线程优先级(1-15) 1个系统线程优先级(0),仅用于对系统中空闲物理块进行清零的零页线程 fork 说明: (1)进程的pid是一个整数,在0到最大值之间。 (2)复制逻辑副本的意思是:Linux使用写时复制(copy on write)机制,子进程暂时共享父进程的有关数据结构,复制延迟到子进程作修改时才进行。 进程控制 2. 执行一个文件的调用exec 由指定的可执行文件覆盖进程的地址空间。 具有多种形式: execve,execlp,execvp等。 进程控制 execve(char *filename, char *argv[], char *envp[]) 执行文件filename,覆盖进程的地址空间 C语言主函数的形式: main(int argc, char **argv, char **envp) argc:参数个数,包括程序名 argv:或写作char *argv[]。 argv[0]~argv[argc-1]指向每个参数串 envp:环境变量串,以空串结束 进程控制 【例】一个简化的shell。 while (1) { type_prompt(); // 在屏幕上显示提示符 read_command(command, params); // 读输入的命令 pid = fork(); if (pid 0) { printf(“Unable to fork.\n”); // 出错

文档评论(0)

挺进公司 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档