计算机操作系统(第四版)第五章-进程管理与内存实例

第五章 进程管理与内存实例

5.1 LINUX简介

一 层次结构

1 进程执行的两个级别

(1)用户态

用户态下只能存取自己的指令和数据,不能执行特权指令。

(2)核心态

核心态下的进程可以访问OS核心和用户进程的地址空间。

综上:虽然系统在执行的时候处于以上两种状态之一,但是核心是为用户进程运行的。核心不是与用户进程平行运行的孤立的进程的集合,而是每个用户进程的一部分。用户进程通过系统调用由用户态切换到核心态。

2 LINUX的三个接口

(1)系统调用接口

用户在程序中(一般是汇编语言)调用OS提供的一些功能。

(2)库接口

以高级语言(比如c语言)标准库函数的形式,为程序员调用OS提供的功能。

(3)命令接口

在操作系统与用户之间提供的双向通信机制。接口一般包括:

一组联机命令、终端处理程序、命令解释程序等等。

      实现方式包括:命令行方式(要求用户记忆命令格式),图形用户接口方式(用户可以利用鼠标对屏幕上的图标进行操作,完成与操作系统的交互,从而减少记忆内容,方便用户使用)

3 系统调用

(1)什么是系统调用?

前文已经说过,就是指用户在程序(一般是汇编语言)中调用OS提供的功能。

   系统调用本身也是若干指令构成的过程(函数),但是与一般过程不同的是,系统调用运行在核心态,但是一般过程运行在用户态。

   系统调用发生在用户进程通过特殊函数(比如OPEN)请求OS内核提供服务的时候。

   系统调用负责对内核所管理资源的访问。

   每个操作系统都提供许多种系统调用 。

(2)系统调用的方式

为了保证OS不被用户程序破坏,不允许用户程序访问系统程序和数据。那麽如何得到系统服务?

   答案是通过一条陷入指令(或者说访管指令),由用户态切换到核心态,转入执行相应的处理程序(陷入处理程序)

注:

系统调用是一个低级过程,只能由汇编语言直接访问。

系统调用是操作系统提供给程序设计人员的唯一接口。

C语言为每个系统调用提供对应的标准库函数,应用程序可以通过c语言库函数来使用系统调用。

(3)系统调用的处理过程

每个系统调用对应一个事先给定的功能号。比如0、1、2等。

系统为实现系统调用功能的子程序(过程)设置入口地址表。

每个入口地址与相应的陷入处理程序对应。

在系统调用之前,保护处理器现场。

系统调用返回后,要恢复处理器现场。

在系统调用处理结束之后,用户程序可以利用系统调用的返回结果继续执行。

怎么样实现用户程序和系统程序之间的参数传递?

一般有以下三种方法:

·由陷入指令自带参数:但是由于陷入指令的长度是有限的,并且还要携带系统调用功能号。所以只能自带有限的参数。

·通过有关寄存器来传递参数:这些寄存器应该是用户程序和系统程序都能访问的,但是由于寄存器的长度和个数是有限的,所以无法传递较多的数据。

·大多在内存中开辟专用的区域(比如堆栈区)来传递参数。

(4)系统调用的分类

系统调用一般分成两个大类:一个是系统自身所需要的,另外一

个是作为服务提供给用户的。

(5)系统调用与一般过程调用的比较

相同点:

   改变指令执行过程(调用之后转去执行系统调用子程序,然后再回来执行用户程序,这也就是为什么要保护处理器现场)。

   是为了实现某个特定功能而设计的,可以多次调用。

   执行完成之后返回。

不同点:

   运行在不同的系统状态:一般的用户过程运行在用户态,而系统调用运行在核心态。

   返回问题:在抢占式调度的系统当中,系统调用在返回的时候,OS会判断是否应该调度执行新的进程。(也就是需不需要剥夺调用进程)如果调用进程不需要剥夺,就返回调用进程继续执行(可能是调用进程优先级最高,或者时间片没到等等)。否则,就引起重新调度,在就绪队列中选择一个新的进程投入运行。

   递归调用:系统调用一般不允许递归(不同进程可以重入一个系统调用)。

   进入和返回方式不同:一般利用int或者trap指令进行系统调用,利用call指令进入普通的过程调用。并且一般的过程调用返回用ret指令,系统调用返回使用iret指令。这种情况下,核心态与用户态的切换由系统在int指令和iret指令内部自动完成。

(6)进入和返回指令

Call指令:

   返回地址压栈(就是call指令下一条指令的地址,这样做其实是为了返回之后能继续执行调用进程)

   将该call指令中的地址(被调用代码的地址)送入pc

Ret指令:

   从栈顶弹出返回地址并且送入pc(这样就能继续执行调用进程)

Int指令和iret指令:

   要处理程序状态字PSW,int指令中要保存用户程序的老psw,iret指令要在返回用户程序前恢复用户程序的老psw。

二 shell

   Linux的命令解释器就是shell。Shell常常被普通用户看作“linux”,但是实际上它与操作系统本身没有关系,可以很容易被替换掉。Linux可以支持很多shell。

5.2 LINUX进程管理

一 进程的结构task_struct

每个进程对应一个task_struct,称为进程描述符,相当于PCB。

二 进程控制

1 进程创建fork

Pid=fork()。创建子进程,子进程是父进程的一个逻辑副本。父进程返回的是子进程的pid,子进程返回0.

  

三 进程调度

   主要说了一个实时调度,实时进程优先级高于普通进程。并且实时进程关注绝对优先,而普通进程主要关注公平。

四 进程同步与通信

1 信号(signal)

   信号是软件层次上对中断的一种模拟,又称为软中断。表示进程之间传送预先约定的信息类型,用于通知某进程发生了一个事件。

2 信号和中断的区别

√中断有优先级;信号没有优先级(所有信号是平等的)

√信号处理程序在用户态运行;而中断处理程序运行在核心态

√中断响应是及时的;信号响应通常有较大的时间延迟,必须等到接收进程执行时才生效

第17讲没看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值