操做系统学习笔记

进程、线程概念node

进程:一个进程就是一个正在执行的程序的实例。算法

进程转换:安全

进程3个状态:运行态,阻塞态,就绪态。多线程

1.进程为等待输入而阻塞。并发

2.调度程序选择另外一个进程。app

3.调度程序选择这个进程。函数

4.出现有效输入。fetch

线程:轻量级进程。spa

 

做业调度按照某种原则,从后备做业队列中选取做业进入内存,并为做业作好运行前的准备工做以及做业完成后的善后处理工做。操作系统

主要调度算法:

First Come First Serve (FCFS)先来先服务:按到达时间前后排序。

Shorted Job First (nonpreemptive & preemptive ) 最短做业优先:按做业的运行时间排序,由短到长。

Round robin 轮转调度:每一个进程执行一个时间片后移到队列末尾,把CPU交给下一个进程。

Priority Scheduling  (nonpreemptive & preemptive ) 优先级调度:执行当前实时优先级最高的进程。动态优先级是在建立进程时赋予该进程一个初始优先级,而后其优先级随着进程的执行状况的变化而改变。

Multiple Queues 多级队列:

1.进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。

2.首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。

3.对于同一个队列中的各个进程,按照时间片轮转法调度。

4.在低优先级的队列中的进程在运行时,又有新到达的做业,那么在运行完这个时间片后,CPU立刻分配给新到达的做业(抢占式)。

 

多级队列算法运做过程示例:

假设系统中有3个反馈队列Q1,Q2,Q3,时间片分别为2,4,8。 
如今有3个做业J1,J2,J3分别在时间 0 ,1,3时刻到达。而它们所须要的CPU时间分别是3,2,1个时间片。
一、时刻0 J1到达。因而进入到队列1 , 运行1个时间片 , 时间片还未到,此时J2到达。
二、时刻1 J2到达。 因为时间片仍然由J1掌控,因而等待。 J1在运行了1个时间片后,已经完成了在Q1中的2个时间片的限制,因而J1置于Q2等待被调度。如今处理机分配给J2。 
三、时刻2 J1进入Q2等待调度,J2得到CPU开始运行。 
四、时刻3 J3到达,因为J2的时间片未到,故J3在Q1等待调度,J1也在Q2等待调度。 
五、时刻4 J2处理完成,因为J3,J1都在等待调度,可是J3所在的队列比J1所在的队列的优先级要高,因而J3被调度,J1继续在Q2等待。
六、时刻5 J3通过1个时间片,完成。
七、时刻6 因为Q1已经空闲,因而开始调度Q2中的做业,则J1获得处理器开始运行。 J1再通过一个时间片,完成了任务。因而整个调度过程结束。
 
 
周转时间 做业完成时刻减去做业到达的时刻:做业完成时刻-做业到达时刻
平均周转时间 用周转时间总时间除以做业个数:全部做业的周转时间/做业总数
甘特图 一种做业执行状况描述图,以下SJF(最短做业调度)。
 
 

用户空间创建的线程包和内核创建的线程包区别图

 

临界区每一个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅容许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不容许其余进程进入。不管是硬件临界资源,仍是软件临界资源,多个进程必须互斥地对它进行访问。

信号量:在多线程环境下使用的一种设施,是能够用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段以前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。

信号量有两种操做:down,up,也就是所谓的P,V操做

down:若是信号量大于0,则继续,等于0则进程将睡眠,将信号量减1。

up:将信号量加1,若是信号量大于0,则继续,若小于或等于0,则唤醒一阻塞在该信号量上的进程。

 

例如:Semaphore的初值为n, m个进程使用该semaphore访问关键区,那么semaphore值的变化范围是多少?

每一个进程进入关键区时都会使Semaphore减1,离开时又使Semaphore加1,因此范围是n-m到n。

信号量能够用来解决一些进程同步的问题,例如:

 

用P、V操做说明互斥量,定出司机与售票员之间的同步算法,司机与售票员活动以下图所示。

 

在汽车行驶过程当中,司机活动与售票员活动之间的同步关系为:售票员关车门后向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程当中售票员售票,到站时司机停车,售票员在车停后开车门让乘客下车。所以司机启动车辆的动做必须与售票员关车门的动做取得同步;售票员开车门的动做也必须与司机停车取得同步。
因此在本题中,应设置两个信号量s一、s2,s1表示是否容许司机启动汽车,其初值为0;s2表示是否容许售票员开车门,其初值为0。

因此解答为:(能够将P操做当作是wait--等待信号,V操做当作是signal--发出信号)

Semaphore  s1,s2=0;  

Driver()                                                Saler()     
{                                                           {
    while(true)                                            while(true)
     {                                                             {
         p(s1);                                                     关车门;
         启动车辆;                                             v(s1);
         正常行车;                                             售票;
         到站停车;                                             p(s2);
         v(s2);                                                      开车门; 
       }                                                            上下乘客;
 }                                                                    }
                                                                 }  

几个利用信号量和线程解决的IPC(进程间通讯)经典问题:

1.生产者与消费者问题

在同一个进程地址空间内执行的两个线程生产者线程生产物品,而后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中得到物品,而后释放缓冲区。当生产者线程生产物品时,若是没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,若是没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。

C解决此问题的源码:

 1 #define N 100  //缓冲区的槽数目
 2 typedef int semaphore;  
 3 semaphore mutex = 1 ;  //临界区(缓冲区)信号量,以互斥各线程的进入
 4 semaphore empty = N;   //缓冲区的空槽数目
 5 semaphore full = 0;   //缓冲区的满槽数目
 6 void producer(void)
 7 {
 8   int item;
 9   while (TRUE) {
10     item = produce_item( );
11     down( &empty);   //空槽减1
12     down( &mutex);  //进入临界区
13     inserUtem(item);  //加入数据
14     up( &mutex);  //离开临界区
15     up( &full); //满槽加1
16        }
17 }
18 void consumer(void)
19 {
20   int item;
21   while (TRUE) {
22     down( &full);
23     down( &mutex);
24     item = remove_ item( );
25     up( &mutex);
26     up( &empty);
27   consume_item(item);  //消费一个数据项
28   }
29 }

 

2.哲学家就餐问题

假设有五位哲学家围坐在一张圆形餐桌旁,作如下两件事情之一:吃饭,或者思考。吃东西的时候,他们就中止思考,思考的时候也中止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。由于用一只餐叉很难吃到意大利面,因此假设哲学家必须用两只餐叉吃东西。他们只能使用本身左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,由于很明显,吃米饭必须用两根筷子。

C解决此问题源码:

PS:philosopher函数未完整,应该修改成下图:

值得注意的是,philosopher函数会有不一样的5个进程来调,参数为 0 到 N-1 。

 

3.读者写者的问题

有一个被许多进程共享的数据区,这个数据区能够是一个文件,或者主存的一块空间,甚至能够是一组处理器寄存器。有一些只读取这个数据区的进程(reader)和一些只往数据区中写数据的进程(writer)。如下假设共享数据区是文件。这些读者和写者对数据区的操做必须知足如下条件:读—读容许;读—写互斥;写—写互斥。这些条件具体来讲就是:

1)任意多的读进程能够同时读这个文件;

2)一次只容许一个写进程往文件中写;

3)若是一个写进程正在往文件中写,禁止任何读进程或写进程访问文件;

4)写进程执行写操做前,应让已有的写者或读者所有退出。这说明当有读者在读文件时不容许写者写文件。

C语言解决此问题源码:写者优先算法

 

死锁

资源死锁的4个条件:

1)互斥条件:在一段时间内某资源只由一个进程占用,若是此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)占有和等待条件:已经获得了某个资源的进程能够再请求新的资源。
3)不可抢占条件:指进程已得到的资源,在未使用完以前,不能被剥夺,只能在使用完时由本身释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
 
不发生死锁的判断:
m个资源,n个进程,每一个进程最大需求w。
知足 (w-1)*n+1<m 则不会发生死锁。
 
避免死锁的方法:经过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。
 
银行家算法:。一种避免死锁的算法。
银行家算法基本思想:分配资源以前,判断系统是不是安全的;如果,才分配。
安全状态:若是没有死锁发生,而且即便全部进程忽然请求对资源的最大需求,也仍然存在某种调度次序可以使每个进程运行完毕。
例如:

如今有5个进程ABCDE,有4种类型的资源R1R2R3R4。在T0时刻系统状态以下。R1R2R3R4的剩余资源数依次为3303

回答下面问题:

1T0时刻是否为安全状态?

2)若这时D提出申请(1,2,0,3),是否能实施资源分配?

 

虚地址到实地址的翻译过程

几种主要的页面置换算法:

FIFO(First In First Out)先进先出:按照先进先出顺序淘汰页面。(ps:页面替换时,出现重复页面,此页面的顺序按照以前的页面顺序算)

LRU( Least Recently Used ) 最近最少使用:将前一段时间内没使用的页面置换。

OPT( Optimal )最佳页面置换算法:

一、若是页框中的某个页面P之后永不使用,则该页面为淘汰页面Pt。
二、若是每一个P都会再次被访问,那么其中最长将来时间内再也不被访问的页面为淘汰页面Pt。
(ps:此算法不可能实现,由于当缺页中断发生时,操做系统接下来页面的访问顺序。)
 
例如:
其实LRU在置换某页面时就是向前看,距离这个置换页面最远的页面被置换。
FIFO就是按照最早放入的页面或者说顺序在前的页面置换掉。
OPT只须要看置换页面位置后面的页面,按照出现顺序,不出现或者最晚出现的被置换掉。若是都没出现就职意置换,通常置换第一个。
 

磁盘调度算法

FCFS (First Come First Served) 先来先服务:和进程调度同样。

最短寻道优先算法(Shortest Seek First):以磁头位置寻找下一个距离最近的磁道。

SCAN(扫描算法 又称 电梯算法):第一个磁道选择离磁头最近的磁道,而后按照磁头移动方向依次选择最近磁道,当此方向上磁道都选择完毕时,反向选择最近磁道。

例如:

 

Inode

文件储存在硬盘上,硬盘的最小存储单位叫作"扇区"(Sector)。每一个扇区储存512字节(至关于0.5KB)。
操做系统读取硬盘的时候,不会一个个扇区地读取,这样效率过低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最多见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,咱们还必须找到一个地方储存文件的元信息,好比文件的建立者、文件的建立日期、文件的大小等等。这种储存文件元信息的区域就叫作inode,中文译名为"索引节点"。
Directory
记录了一个文件/目录名称对应的Inode number。
PS:
1.目录文件的读权限(r)和写权限(w),都是针对目录文件自己。因为目录文件内只有文件名和inode号码,因此若是只有读权限,只能获取文件名,没法获取其余信息,由于其余信息都储存在inode节点中,而读取inode节点内的信息须要目录文件的执行权限(x)。
2.每一个inode都有一个号码,操做系统用inode号码来识别不一样的文件。Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来讲,文件名只是inode号码便于识别的别称或者绰号。
3.Unix/Linux系统容许多个文件名指向同一个inode号码。
 
HardLink 硬连接
能够用不一样的文件名访问一样的内容;对文件内容进行修改,会影响到全部文件名;可是,删除一个文件名,不影响另外一个文件名的访问。这种状况就被称为"硬连接"(hard link)。
 
SoftLink 软连接

文件A和文件B的inode号码虽然不同,可是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。所以,不管打开哪个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软连接"(soft link)或者"符号连接"(symbolic link)。

这意味着,文件A依赖于文件B而存在,若是删除了文件B,打开文件A就会报错:"No such file or directory"。这是软连接与硬连接最大的不一样:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"连接数"不会所以发生变化。

 
Block devices & Character devices 块设备&字符设备
I/O设备大体分为两类:块设备和字符设备。块设备将信息存储在固定大小的块中,每一个块都有本身的地址。数据块的大小一般在512字节到32768字节之间。块设备的基本特征是每一个块都能独立于其它块而读写。磁盘是最多见的块设备。
 
FAT (File Allocation Table 文件配置表)

一个分区分红同等大小的簇,也就是连续空间的小块。簇的大小随着FAT文件系统的类型以及分区大小而不一样,典型的簇大小介于2KB到32KB之间。每一个文件根据它的大小可能占有一个或者多个簇;这样,一个文件就由这些这些(称为单链表)簇链所表示。然而,这些链并不必定一个接着一个在磁盘上存储,它们常常是在整个数据区域零散的储存。 
文件分配表(FAT)是映射到分区每一个簇的条目列表。每一个条目记录下面五种信息中的一种: 
1.链中下一个簇的地址  
2.一个特殊的文件结束符(EOF)

3.符号指示链的结束   

4.一个特殊的符号标示坏簇    

5.一个特殊的符号标示保留簇 ( 0来表示空闲簇 )

 

Memory mapped I/O : 就是把磁盘上的file映射到内存上,当咱们从内存上fetch byte时,对应的file就被读取。一样的,当咱们在内存上存储字节的时候,对应的file就被写入。这就让咱们不需经过read和write系统调用而去操做I/O。

 

设备独立性: 操做系统 把全部 外部设备 统一看成成文件来看待,只要安装它们的 驱动程序 ,任何用户均可以像使用文件同样,操纵、使用这些设备,而没必要知道它们的具体存在形式。
 
三种I/O实现方式:
1.Programmed I/O (程序控制I/O)是指用特定的IO指令实现从设备到CPU的数据传输,CPU须要作所有操做。
 
2.DMA (Direct Memory Access  直接存储器访问)
DMA传输将数据从一个地址空间复制到另一个地址空间。CPU 初始化这个传输动做,传输动做自己是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操做并无让处理器工做拖延,反而能够被从新排程去处理其余的工做。
 
3.Interrupt-Driven I/O ( 中断驱动I/O ):当某进程要启动某个I/O设备工做时,便由CPU向相应的设备控制器发出一条I/O命令,而后当即返回继续执行原来的任务,设备控制器则按照该命令的要求去控制指定I/O设备。此时,CPU与I/O设备并行操做。
 
Disk Formatting ( 磁盘格式化 )
磁盘格式化是在物理驱动器(磁盘)的全部数据区上写零的操做过程,格式化是一种纯物理操做,同时对硬盘介质作一致性检测,而且标记出不可读和坏的扇区。
 
Domain(保护域/域):一对(对象、权限)组合。
 
每一个文件能够在不一样的域中有不一样的权限,每一个域也能切换到其余域,此时文件的权限改变,例如UNIX的进程有2个部分,用户部分和核心部分,当执行系统调用时,进程从用户部分切换到核心部分,核心部分能够访问与用户部分不一样的对象集。
 
ACL(Access Control List)访问控制链表
相关文章
相关标签/搜索