操作系统学习笔记(一)

来源:互联网 发布:考试作弊软件app 编辑:程序博客网 时间:2024/05/17 01:56

操作系统是计算机类专业比较重要的一门课程,所以,希望用csdn来记录自己学习过程中的一些点滴。

本篇文章整理操作系统中,关于进程的一部分内容。

首先,什么是操作系统?操作系统是为了达到方便用户和提高资源利用率为目的而设计的,控制和管理计算机硬件和

件资源,合理的组织计算机工作流程的程序的集合。

操作系统的特征:并发、共享、虚拟、异步。

并发性是指两个或者两个以上的操作在同一时间间隔内发生。(宏观上,感觉几个操作时同一时间发生,就是所谓的

行性,微观上,几个操作并不是同一时间发生,而是并发性)

共享:系统中的资源供内存中多个并发执行的进程共同使用,包括硬件共享和软件共享。其中的硬件共享一般是互斥

享,比如在多道批处理系统中,多个进程共享cpu为互斥共享。当多个进程同时读取内容时,即就是进行读操作

时,这样的共享为软件共享。共享与并发互为存在条件,共享是以并发为条件,共享影响并发。

虚拟:通过 一定的技术把一个物理实体变成若干个逻辑上的对应物。(内存足够大时不需要虚拟)

异步:在多道程序下,进程是以异步的方式进行,即就是走走停停,当遇到输入输出语句时,将当前程序的信息写进

pcb里(之后解释),然后就会释放cpu,供别的进程使用。。

程序的执行分为顺序执行和并发执行。这里我们先来引入一个概念:前趋图。

前趋图,是有向无环图,结点是用来表示操作、语句、程序段或者进程 ;边,表示操作之间的关系,偏序或者前趋关

系。

顺序执行程序设计:与操作的静态描述 一样,即就是按照描述的顺序一步一步执行。

举例:(注明:下文中出现的代码只会出现核心语句,所谓的变量的定义等语句不会给出。)

a = 3;b = a+1;c = b+5;


这个就是顺序执行的程序,先计算a,接着是b,然后是c。所以,这是表明了顺序程序设计的特点:顺序性、封闭性

(指的是资源的封闭)、可再现性(指的是结果)。

并发执行程序设计:与操作的静态描述不一定一致。下边的举例(程序段中的并发执行):

d = 2;a = d+2;b = 5;c = a+b;


假设给以上四句语句编号,分别为1,2,3,4.所以这个程序的执行顺序就会有以下几种:1,2,3,4和1,3,2,4和3,1,2,4这三

种。只有第一种与操作的静态描述一致。下边看一个多道程序环境下的程序的并发实例:

int  n = 0;//程序An = n+2;//程序Bprintf("%d",n);n = 1;


这个实例中,执行顺序不同就会导致最终的n值不同。这样 就导致了结果的不可再现性,以及失去资源的封闭性(同

名变量会被多个进程改写),当然并发执行最显著的特征就是:间断性(走走停停)。

所以,我们总结:并发出现结果可再现的情况:多个进程中没有同名变量;多个进程都是读操作。

当两个进程都是执行读操作,他们才能够并发执行(既能使资源封闭,又能使结果可再现),这就是所谓的Bernstein

条件。然而这个判断也是需要耗时的,为了解决这个问题,我们引入了进程的概念。

进程:是程序的一次执行过程,是系统进行资源分配和处理机调度的一个独立单位。

进程 = 程序段+数据段+PCB(程序段和数据段是进程的静态部分,PCB是进程的动态部分)

进程与程序的区别:

进程是一个动态的概念,程序是一个静态的概念;进程具有并发性,而程序没有;进程是资源分配和处理机调度的独

立单位,并发性受系统的制约;一个程序多次执行,对应多个进程;不同的进程可以包含同一程序。

进程的三种基本的状态:

就绪状态(等处理机)、执行状态(用处理机)、阻塞状态(等事件)。这三种状态都是活动状态。

基本状态图如下:


具有挂起操作的进程状态的演变:

为什么会引入挂起?系统的负荷调节,对换的需要(缓解内存的紧张,实现内存的虚拟扩充,作业由内存会到外存)

所谓的挂起,就是指使正在活动的进程(执行状态、就绪状态或者阻塞状态)处于静止状态,此时系统回收这些进程

占用的内存资源。

下边给出状态演变图:


进程控制块PCB:PCB是进程存在的唯一标志。主要用于保存程序运行过程中的现场信息(中断时,保存现场以及下

一条语句的起始地址等),所以PCB应该常驻内存。

PCB其实是一个结构体,组织方式有2种:链接方式、索引方式。

进程控制:是对系统中所有进程的声明历程实施控制,是管理进程生灭及状态转换的程序的集合。

进程控制是通过操作系统内核实现,操作系统内核又是通过原语实现。

原语:由若干条机器指令构成的,完成特定功能的一段程序,其执行过程不可分割。<类似于高级语言中的函数>

进程控制原语:

进程的创建、终止;进程的阻塞、唤醒;进程的挂起、激活。

前边4个是进程控制的基本原语,在执行每个原语时,进程的状态发生哪些变化?

创建:扫描PCB队列,从空闲队列中粘取空白的PCB块,将进程的现场信息写进PCB,将该PCB放进就绪队列

终止:回收资源,释放PCB,再将该PCB挂回空闲队列。

阻塞:将PCB挂到与本次中断原因相同的阻塞队列。

唤醒:将队列中的PCB挂到就绪队列。

进程的同步:

进程的同步是使并发执行的程序之间可以共享资源和相互合作,从而使程序的结果具有可再现性。下边先引入几个概

念:

临界资源:一次只能允许一个进程访问的资源;

临界区:访问临界资源的代码段,代码段不能交叉执行。

间接的制约关系:由于共享资源引起。(互斥)

直接的制约关系:由于相互合作引起。(共享)比如:4*100米接力赛中,4名同学直接的关系就是 直接的制约关

系。

临界区必须互斥访问。所以在进入区的进程必须先检查临界资源是否被占用,如果未被占用,该进程就进入临界区,

否则,过段时间再来检查。

同步机制应该遵循的准则:

空闲让进:临界区空闲时,进程可以进入。

忙则等待:临界资源被占用,进程只能等待。

有限等待:避免死等的原则。

让权等待:等待的同时让出CPU,调用转进程调度,重新分配CPU。进程调度就是决定将CPU分给哪个进程。

进程互斥问题的解决方法-----硬件方法和软件方法

硬件方法:方法一。利用Test-and-Set指令实现互斥

bool TS(bool lock){        bool old = lock;        lock = true;        return old;}

lock表示资源的两种状态:true表示临界区忙,否则空闲。

当lock为真(即就是临界区忙),一直检测,直到临界区空闲。当退出临界区时,一定将lock置为false。

方法二。利用swap交换。

key = true;do{     swap(lock,key);//表明交换key和lock的值}while(key);


恩利用交换的办法,key里的值就是lock的值,即就是临界区的状态,当lock是true(忙),key也就是true,程序一直

执行,直到key为false,循环退出,执行下边的语句,出临界区时,lock置为false。

关于软件的方法,之后再整理。。

以上如有不合理的地方,请指出~~谢谢

0 0
原创粉丝点击