国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > 操作系统(modifying)

操作系统(modifying)

来源:程序员人生   发布时间:2016-12-02 08:47:49 阅读次数:2614次

  • 操作系统
    • 进程线程
      • 进程
        • 基础
        • 进程状态
        • 进程控制块
        • 进程控制
        • 进程间通讯 IPC
        • 进程调度
        • 进程同步互斥
          • 同步
          • 互斥
          • 原则
          • 整型信号量lockunlock原语
          • 记录型信号量PV操作
            • 利用信号量实现进程同步
            • 利用信号量实现进程互斥
            • 利用信号量实现先驱关系
        • 管程
        • 死锁
          • 预防死锁太守旧宁可资源闲置因此效力低
          • 死锁避免介于预防与检测之间寻觅可能的安全顺序
          • 死锁检测与接触
      • 线程
      • others
    • 存储管理内存
      • 分区存储管理
        • 固定式分区
        • 页式存储管理
          • MMU
          • 快表TLB
        • 段式存储管理
        • 段页式存储管理
        • 覆盖技术交换技术
          • 覆盖技术
          • 交换技术
        • 虚拟存储管理
          • 局部性原理
          • 虚拟页式存储管理
      • Linux的内存管理
    • IO
      • IO方式的演化
        • 循环等待
        • 中断
        • 直接内存访问
        • 通道
          • 通道类型
      • 缓存cache和缓冲buffer
        • 缓存
        • 缓冲
      • 假脱机Spool
    • 文件系统
      • 文件控制块FCB
      • 文件系统层次结构
      • 磁盘
    • 操作系统概述
        • 手工操作阶段此阶段无操作系统
        • 批处理阶段操作系统开始出现
        • 分时操作系统
        • 实时操作系统
        • 网络操作系统和散布式计算机系统
        • 个人计算机操作系统
      • 系统调用

操作系统

OS对资源的管理,就是对硬件+软件两种资源的管理。
硬件:CPU+存储(主存)+装备
软件:文件(系统)
这就是操作系统的4个章节。

进程线程

单核达不到程序级并行,但可以到达指令级并行(pipeline)。

进程

基础

概念:
目的:为了实现并发,要不然直接傻瓜调度就好了,就不需要进程了。
进程与程序的区分:动态vs静态;进程有PCB;2者多对多(1个进程可以触及多个程序–>通过系统调用;1个程序可以对应多个进程–>通过量次履行)

进程状态

状态:运行,阻塞(等待除CPU的资源,如IO,内存等),就绪(等CPU),还有创建&终结
3个核心状态构成4条有向边:
1. 运行 –> 阻塞:等待IO等资源;
2. 阻塞 –> 就绪:IO等资源完成,等待CPU;
3. 就绪 –> 运行:终究抢到了CPU;
4. 运行 –> 就绪:时间片用完了。。。

另外,新建(fork)以后进程处于就绪状态,运行完落后程也可能直接变成结束状态。

进程控制块

是1种数据结构。
包括PID,进程状态,优先级,现场保存区,所需资源已分配资源,调度信息等。现场保存区就是释放CPU时,用来记录CPU此时的寄存器、程序状态字等状态的。
创建进程就是创建PCB,杀死进程就是撤消PCB ==> PCB就是进程存在的标志和唯1代表。它包括了进程的状态调度和控制此进程的所有信息。
进程 = 程序段 + 数据块 + PCB

进程控制

即:创建,撤消,状态转换。
原语primitive
创建start() 撤消exit() 阻塞await() 唤醒notify()
撤消原语撤消的是PCB而不是程序段,由于程序段有可能被几个进程同享。

进程间通讯 IPC

管道、信号、消息队列、同享内存、信号量、套接字 等
Pipe:比如cat -A hello.cpp | head,只能承载无格式字节流;
Signal:比如9号代表SIGKILL,所以有kill ⑼ xxx
消息队列:是消息的链接表,克服了信号承载信息量少,管道只能承载无格式字节流和缓冲区大小受限等缺点;
同享内存:多个进程可以访问同1块内存空间,是最快的可用IPC情势。是针对其他通讯机制运行效力较低而设计的。常常与其它通讯机制,如信号量结合使用,来到达进程间的同步及互斥。
信号量(semaphore):主要作为进程间和同1进程不同线程之间的同步手段。
Socket:更加1般的进程间通讯机制,可用于不同机器之间的进程间通讯。

进程调度

先来先服务FCFS、轮转(时间片)、优先级法(优先级高的弄完了再释放CPU)、分级轮转(优先级+时间片:多个优先级不同的队列,先处理优先级高的队列)

进程同步、互斥

信号量机制可以用来解决进程的同步与互斥问题。
临界资源:某些时段只能允许1个进程使用的资源。
临界区:访问临界资源的程序段。临界区是代码,代码段。

同步

也叫直接制约关系。进程间协同工作,有前后次序。

互斥

也叫间接制约关系。访问临界资源时。

原则

空闲让进,忙则等待(两句空话,无需解释)
有限等待,让权等待(正解!对要求访问的进程,应保证能在有限时间内进入临界区;如果进不去临界区,应当立即释放处理器,避免忙等待)

整型信号量(lock/unlock原语)

整型信号量被定义为1个用于表示资源数目的整型量S
wait和signal操作可描写为:

wait(S){ while (S<=0); S=S⑴; } signal(S){ S=S+1; }

缺点:很明显,缺点就是违背了“让权等待”原则,信号量S<=0时,会不断循环测试,进程处于忙等状态。

记录型信号量——P/V操作

之所以叫记录型信号量,是由于信号量不再是单纯的1个整形来表示,而使用1个结构体:

typedef struct{ int value; struct process *L; } semaphore;

相应的wait(S)和signal(S)的操作以下:

void wait (semaphore S) { //相当于申请资源 S.value--; if(S.value<0) { add this process to S.L; block(S.L); } }

wait操作,S.value–,表示进程要求1个该类资源,当S.value<0时,表示该类资源已分配终了,因此进程应调用block原语,进行自我阻塞,放弃处理机,并插入到该类资源的等待队列S.L中,可见该机制遵守了“让权等待”的准则

void signal (semaphore S) { //相当于释放资源 S.value++; if(S.value<=0){ remove a process P from S.L; wakeup(P); } }

signal操作,表示进程释放1个资源,使系统中可供分配的该类资源数增1,故S.value++。若加1后还是S.value<=0,则表示在S.L中仍有等待该资源的进程被阻塞,故还应调用wakeup 原语,将S.L中的第1个等待进程唤醒。

利用信号量实现进程同步
利用信号量实现进程互斥
利用信号量实现先驱关系

具体参考信号量:整型、记录型信号量和利用信号量实现进程互斥和先驱关系
TODO:生产者消费者 银行家 等

管程

P/V操作有效,但是是低级的,如果不由程序员来控制完成,才是ok的。
管程,就是用来管理临界资源的。
为了访问临界资源,管程每次只允许1个进程进入其内,不过这无需程序员操心,由编译器保证。所以很高级。

死锁

死锁的条件:
1. 互斥;
2. 不剥夺;
3. 要求和保持;
4. 环路等待。

即:有争取的东西;他人正在用东西的时候你不能侵占;没拿全所需的东西的时候,已拿到的也不放手;最后大家都相互等待循环等待,gg。

Attention:环路等待和死锁的关系。
死锁,1定是出现了环路等待。但是环路等待未必会死锁。
例如:两个人要上厕所,需要穿鞋,有1只L鞋子,1只R鞋子。A拿到L,B拿到R,则环路等待,两人都走不了路,死锁。但是如果有两只L鞋子,1只R鞋子,从等待关系上来看,两个人还是会构成环路等待圈,但是其实不会死锁。由于B可以集齐1套,用完以后释放1只L1只R,此时A就能够的到R,愉快上厕所=.=
所以:只有系统的每类资源都只有1个时,环路等待才等价于死锁。

对待死锁,有:死锁预防、死锁避免、思索检测与消除。

预防死锁(太守旧,宁可资源闲置,因此效力低)

资源独占:毙掉3,即必须拿到所有的资源才能运行,如果拿不全的话,那就不拿。
缺点:资源利用率低,系统资源被严重浪费,其中有些资源可能仅在运行早期或运行快结束时才使用,乃至根本不使用。而且还会致使“饥饿”现象,当由于个别资源长时间被其他进程占用时,将导致等待该资源的进程迟迟不能开始运行。
资源顺序分配:只要进程提出申请分配资源Ri,则该进程在以后的资源申请中,只能申请编号大于Ri的资源。
好处:提高资源利用率
缺点:问题是编号必须相对稳定,这就限制了新类型装备的增加

死锁避免(介于“预防”与“检测”之间,寻觅可能的安全顺序)

银行家算法:看看借出去的租能否收回来。如果全都借出去还满足不了对方,不能收回来,那就先不借出去。

死锁检测与接触

资源分配图:要求边、分配边
死锁定理:资源分配图不能完全简化 <==> 死锁
实质上是如何让释放资源的进程继续运行
资源剥夺法:挂起某些进程。被挂起的进程不能1直挂着处于“饥饿状态”,饿死了怎样办。。。
撤消进程法:撤消某些进程。根据优先级和撤消的代价决定。

线程

目的:进1步提高程序并发度,提高系统吞吐量
资源同享,减小开消,更好的并发性
进程是资源分配的基本单位,线程是CPU调度的基本单位。
进程有自己的地址空间,即便崩了也不会影响其他进程;线程没有单独的地址空间(但有自己的堆栈&局部变量),线程崩了全部进程就崩了。所以多进程比多线程更硬朗,但资源消耗太大,效力太差。
进程有自己的数据空间,所以进程间数据的传递需要进程间通讯;线程没这么麻烦,同1进程下的线程同享进程的代码段、数据段、系统资源(打开的文件等)等。

others

孤儿进程vs僵尸进程
爸爸gg了,孩子就是孤儿进程;孩子gg了,爸爸不去收尸,孩子就成了僵尸进程。
所有的进程(init进程除外)gg后都会经历僵尸进程,等待爸爸来收尸^_^。
进程的TASK_ZOMBIE状态:进程灭亡,PCB还在task数组中。发送信号给父进程,父进程释放其task_struct结构。

存储管理(内存)

地址转换
相对地址(逻辑地址/地址空间):源代码编译成的目标代码中的地址
绝对地址(存储空间):可履行代码在物理内存中的实际地址
地址重定位(地址映照):逻辑地址 –> 绝对地址

静态重定位
程序履行之前进行的定位,直接修改存有地址的源码

动态重定位
程序履行进程中的地位,装入代码后,拿相对地址加上起始地址便可。

分区存储管理

固定式分区

页式存储管理

MMU

存储管理部件MMU,Memory Management Unit,有时称作分页内存管理单元(paged memory management unit,缩写为PMMU)。它是1种负责处理CPU的内存访问要求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理,将虚页号转换为物理页号,页内偏移不用改动)等。

快表TLB

页表在主存,1次读写操作需要两次访存。第1次从内存访问页表,获得物理地址,第2次才是真实的根据物理地址获得内存中的数据。
所以将1部份页表放入cache,成为快表。就变成了1次“访缓”+1次访存。固然如果“访缓”没找到相应的页,还得去主存中访问页表。(如果根据页表得到的页不在主存中,还需要产生缺页中断,由中断处理程序将相应的页从磁盘调入主存)

内存管理单元通常借助1种叫做转译旁观缓冲器(Translation Lookaside Buffer,缩写为TLB)的相联高速缓存(associative cache)来将虚拟页号转换为物理页号。当后备缓冲器中没有转换记录时,则使用1种较慢的机制,其中包括专用硬件(hardware-specific)的数据结构(Data structure)或软件辅助手段。这个数据结构称为分页表,页表中的数据就叫做页表项(page table entry,缩写为PTE)。物理页号结合页偏移量便提供出了完全的物理地址。

段式存储管理

段页式存储管理

覆盖技术&交换技术

目的:利用外存来逻辑地扩充内存。

覆盖技术

铁定不会同时履行的程序段同享1个内存区域。不履行的先放在磁盘上。
对用户要求太高,需要用户指定哪些可以相互覆盖,不人性化。

交换技术

也叫滚入滚出,roll-in, roll-out
需要动态重定位机构支持,即再度滚回来时不1定还是之前的内存地址。
交换技术对用户透明,good!

虚拟存储管理

以两个技术为基础——局部性原理虚拟页式存储管理

局部性原理

时间(循环/子程序/栈)&空间(顺序履行/数组遍历/相邻寄存)

虚拟页式存储管理

逻辑地址空间很大,实际主存有限。需要时调入主存便可。
缺页中断

页面置换算法
1. 先进先出FIFO;
2. 最近最久未使用LRU;
3. 最优算法OPT:foresee,impossible。

Linux的内存管理

地址空间大于主存物理空间
进程保护:每一个进程都有自己的虚拟地址空间,即便gg了也不会相互影响
虚拟内存可以隔离进程的地址空间,那末如果不同进程的虚拟地址映照到同1物理地址,就能够实现内存同享,这就是同享虚拟内存!既可以节省物理内存,又可以实现进程间通讯

IO

PCI总线:Peripheral Component Interconnect总线,外围装备互连总线。将CPU和存储器连接到快速装备和扩大总线上。
所以说PCI不是总线,是“外围装备互连”。“PCI总线”才是总线。

控制器
很多IO装备都有自己的控制器。
CPU操纵控制器,使装备完成I/O传输。

IO方式的演化

  1. 循环等待(忙等待);
  2. 中断;
  3. 直接内存访问DMA;
  4. 通道Channel。

循环等待

CPU不停扫描装备控制器中的寄存器的状态,明显耽误了CPU干正事儿。

中断

CPU上有中断要求线。
装备接收CPU指令开始传数据,缓冲寄存器满了就开始产生中断,CPU不能不来处理中断,亲身转移这些数据。每一个字在存储器与I/O控制器之间的传输都必须经过CPU,这就致使了中断驱动方式依然会消耗较多的CPU时间。

中断屏蔽 中断向量表 中断优先级

中断用于处理异步事件系统调用(用圈套方式进入内核的管态)

直接内存访问

用于大容量传输装备。
CPU通知数据传输的起始结束位置和大小,DMA将数据从装备传到内存(需要占用内存总线,暂时制止CPU访存),弄完了就给CPU发出中断,告知它完事儿了。

中断 vs DMA
中断的话,数据缓冲寄存器满1次就得中断CPU1次,CPU得亲身转移这批数据;DMA则是将所有数据传输终了后,才中断CPU,减少了CPU的终端次数,而且数据传输不经过CPU。完全解放了CPU。

通道

通道是1个独立与CPU的专门负责IO的PU。有自己的通道指令。
I/O通道方式是DMA方式的发展,它可以进1步减少CPU的干预,即把对1个数据块的读写为单位的干预,减少为对1组数据块的读写及有关的控制和管理为单位的干预。

I/O通道 vs 1般处理机
通道指令的类型单1,没有自己的内存,通道所履行的通道程序是放在主机的内存中的,也就是说通道与CPU同享内存。

I/O通道 vs DMA
DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。另外,每一个DMA控制器对应1台装备与内存传递数据,而1个通道可以控制多台装备与内存的数据交换。

通道类型

字节多路通道:低速装备(eg:打印机),1次1字节。
数据选择通道:高速装备(eg:磁盘/磁带),以块为单位传送。但是1次只能对1台装备进行IO操作。
数组多路通道:高速,分时操作不同的装备。

缓存(cache)和缓冲(buffer)

相同点: 都是介于高速装备和低速装备之间。

缓存

寄存的是低速装备上的某些数据的复制的数据,也就是高速缓存上有的低速装备上面必定有。这些数据常常要访问,所以在高速缓存上是为了加快访问速度

缓冲

1般在内存区域,用来存储数据。用于装备之间或装备与程序之间,弥补CPU和IO装备速度的不匹配。解决基本数据单元大小(即数据粒度)不匹配的问题。提高CPU和I/O装备之间的并行性。
虽然也能够在硬件上采取硬件缓冲器实现,但是太贵了。

假脱机Spool

同享打印机是使用SPOOLing技术的1个实例,用于多用户系统和局域网络中。
当用户进程要求打印输出时,SPOOLing系统同意为它打印输出,但其实不真正立即把打印机分配给该用户进程,而只为它做两件事:
1. 由输出进程在输出井中为之申请1个空闲磁盘块区,并将要打印的数据送入其中。
2. 输出进程再为用户进程申请1张空白的用户要求打印表,并将用户的打印要求填入其中,再将该表挂到要求打印队列上。

SPOOLing系统的主要特点有:提高了I/O的速度;将独占装备改造为同享装备实现了虚拟装备功能

文件系统

文件:具有符号名的相干数据的集合。
无结构文件:1系列的字符串组成,流式文件。
有结构文件:相干记录的集合。比如表格等。

文件转储:全量转储、增量转储。

目录:文件系统层次结构的非终结结点。
文件:终结结点。

文件系统:负责存取和管理外存上文件信息的功能模块。

文件控制块FCB

进程 = PCB + 程序段 + 数据段
文件 = FCB + 文件体
文件名、用户名、物理地址、格式、编码、属性、密码等。

文件系统层次结构

文件系统3大职能:
1. 建立文件;
2. 加工文件;
3. 输出加工后的文件。

磁盘

调度
先来先服务FCFS:
最短寻道时间优先shortest seed time first, SSTF:(贪心算法),不能保证平均最短,但是明显好过 FCFS。可能使1些进程饥饿。
SCAN算法:不但斟酌最短寻道,还要斟酌必须与当前磁头移动方向相同。磁头类似电梯来来回回,又称为“电梯调度算法”。
循环扫描CSCAN,circular scan:磁头单向移动,到达最外道时再从最里道开始扫描。

1般选择SSTF,磁盘负荷重的系统选择SCAN/CSCAN,避免死等。

便宜冗余磁盘阵列RAID,redundant arrays of inexpensive disks

操作系统概述

存储程序式计算机,冯 诺依曼计算机:运算器、控制器(自动化操作)、存储器(存储程序和数据)、IO部件。

操作系统(Operating System, OS)是指控制和管理全部计算机系统的硬件和软件资源,并公道地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。
操作系统是计算机系统中最基本的系统软件。

操作系统的特性:
并发:
同享:并发与同享相互依存。
不肯定:OS需要随时处理系统中的不肯定事件。
虚拟:内存、CPU、外设等都采取了虚拟技术,逻辑上扩充了数量。

手工操作阶段(此阶段无操作系统)

批处理阶段(操作系统开始出现)

为了解决人机矛盾及CPU和I/O装备之间速度不匹配的矛盾,出现了批处理系统。它按发展历程又分为单道批处理系统、多道批处理系统(多道程序设计技术出现以后)。

分时操作系统

时间片

实时操作系统

网络操作系统和散布式计算机系统

个人计算机操作系统

系统调用

操作系统和利用程序之间的接口。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生