操作系统基础知识归纳总结整理
操作系统基础
并⾏和并发
并⾏:在同⼀个时刻,有多个指令在单个CPU同时执⾏
并发:在同⼀个时刻,有多个指令在单个CPU交替执⾏
进程和线程
进程:正在运⾏的软件(就是操作系统中正在运⾏的⼀个应⽤程序)
独⽴性:进程是⼀个能独⽴运⾏的基本单位,同时也是系统分配资源和调度的独⽴单位
动态性:进程的实质是程序的⼀次执⾏过程,进程是动态产⽣的,动态消亡的
并发性:任何进程都可以同其他进程⼀起并发执⾏(CPU在多个进程之间进⾏⼀个动态的切换)
线程:是进程中的单个顺序控制流,是⼀条执⾏路径(就是应⽤程序中做的事情)
单线程:⼀个线程如果只有⼀条执⾏路径,则称为单线程程序
多线程:⼀个进程如果有多条执⾏路径,则成为多线程程序
进程和线程
进程和线程的区别
进程是资源分配的基本单位,线程是CPU调度的最⼩单位
⼀个线程只能有⼀个进程,⼀个进程可以有多个线程
进程间不会相互影响,但是⼀个线程如果崩溃,会导致进程与其⼀起崩溃
进程具有的特征:
动态性:进程是程序的⼀次执⾏过程,是临时的,有⽣命期的,是动态产⽣的,动态消亡的
并发性:任何进程都可以同其他进⾏⼀起并发执⾏
独⽴性:进程是系统进⾏资源分配和调度的⼀个独⽴单位
结构性:是由程序,数据和进程块三部分组成
进程间的通信⽅式:
1.⽆名管道( pipe ): 管道是⼀种半双⼯的通信⽅式,数据只能单向流动,⽽且只能在具有亲缘关系的进程间使⽤。进程的亲缘关系通常是指⽗⼦进程关系。
2.⾼级管道(popen): 将另⼀个程序当做⼀个新的进程在当前程序进程中启动,则它算是当前程序的⼦进程,这种⽅式我们成为⾼级管道⽅式。
3.有名管道 (named pipe) : 有名管道也是半双⼯的通信⽅式,但是它允许⽆亲缘关系进程间的通信。
4.消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载⽆格式字节流以及缓冲区⼤⼩受限等缺点。
5.信号量( semophore ) : 信号量是⼀个计数器,可以⽤来控制多个进程对共享资源的访问。它常作为⼀种锁机制,防⽌某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同⼀进程内不同线程之间的同步⼿段。
6.信号 ( sinal ) : 信号是⼀种⽐较复杂的通信⽅式,⽤于通知接收进程某个事件已经发⽣。
7.共享内存( shared memory ) : 共享内存就是映射⼀段能被其他进程所访问的内存,这段共享内存由⼀个进程创建,但多个进程都可以访问。共享内存是最快的 IPC ⽅式,它是针对其他进程间通信⽅式运⾏效率低⽽专门设计的。它往往与其他通信机制,如信号两,配合使⽤,来实现进程间的同步和通信。
8.套接字( socket ) : 套解字也是⼀种进程间通信机制,与其他通信机制不同的是,它可⽤于不同机器间的进程通信。进程通信方式
⽐较:
管道:速度慢,容量有限
消息队列:容量受到系统限制,且要注意第⼀次读的时候,要考虑上⼀次没有读完数据的问题
信号量:不能传递复杂信息,只能⽤来同步
共享内存:能够很容易控制容量,速度快,但要保持同步
线程间的通信机制
1.锁机制:互斥锁,条件变量,读写锁
互斥锁提供了以排他⽅式防⽌数据结构被并发修改的⽅法
读写锁允许多个线程同时读共享数据,⽽是对写操作是互斥的
条件变量可以以原⼦的⽅式进⾏阻塞进程,直到某个特定条件为真为⽌。对条件的测试实在互斥锁的保护下进⾏的。条件变量始终与互斥锁⼀起使⽤。
2.信号量机制:包括⽆名信号量和命名线程信号量
3.信号机制:类似进程间的信号处理
线程同步的⽅式?
线程同步的⽅式:临界区,互斥量,信号量,事件
临界区:通过对多线程的串⾏化来访问公共资源或者⼀段代码,速度快,适合控制数据访问
互斥量:采⽤互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限
信号量:它允许多个线程同⼀时刻访问同⼀资源,但是需要限制同⼀事件访问此资源的最⼤线程数⽬
事件:通过通知操作的⽅式来保持多线程的同步
线程同步和互斥的区别
1. 互斥是指某⼀资源同时只允许⼀个访问者对其进⾏访问,具有唯⼀性和排它性。但互斥⽆法限制访问者对资源的访问顺序,即访问是
⽆序的。
2. 同步是指在互斥的基础上(⼤多数情况),通过其它机制实现访问者对资源的有序访问。
3. 同步其实已经实现了互斥,所以同步是⼀种更为复杂的互斥。
4. 互斥是⼀种特殊的同步。
互斥:指某⼀资源同时只允许⼀个访问者对其进⾏访问,具有唯⼀性和排他性。
同步:在互斥的基础上,通过其它机制实现访问者对资源的有序访问
同步:体现的是协作性。互斥:体现的是排他性
同步机制的原则:1.空闲让进,2.忙则等待,3.有限等待,4.让权等待
总的来说,两者的区别就是:
互斥是通过竞争对资源的独占使⽤,彼此之间不需要知道对⽅的存在,执⾏顺序是⼀个乱序。
同步是协调多个相互关联线程合作完成任务,彼此之间知道对⽅存在,执⾏顺序往往是有序的。
lock与unlock⽅法,替换synchronized,这就是互斥锁的体现。消费者⽣产者模式就是同步锁的体现。
进程的调度算法有哪些?
1.先来先服务
2.短作业优先
3.时间⽚轮转调度算法
4.⾼响应⽐优先
5.优先权调度算法
6.多级队列调度算法
基础知识
⽤户态和内核态
介绍:
⽤户态:只能受限地访问内存地址,且不允许访问外围设备,没有占⽤CPU地能⼒,CPU资源可以被其他程序获取
内核态:可以访问内存所有数据以及外围设备,也可以进⾏程序的切换
为什么要分:
安全性:防⽌⽤户程序恶意或者不⼩⼼破坏系统/内存/硬件资源
封装性:⽤户程序不需要实现更加底层地代码
利于调度:如果多个⽤户程序都在等待键盘输⼊,这时就需要进⾏调度;统⼀交给操作系统调度更加⽅便
如何从⽤户态切换到内核态:
系统调⽤:⽐如读取命令⾏输⼊,本质上是通过中断实现的
⽤户程序发⽣异常时:⽐如缺页异常
外围设备的中断:外围设备完成⽤户请求的操作之后,会向CPU发出中断信号,这时CPU会处理对应的中断处理程序
僵⼫进程和孤⼉进程
僵⼫进程:
介绍:⼀个⼦进程结束后,但他的⽗进程并没有等待它,那么这个⼦进程将成为⼀个僵⼫进程
特点:⼀个死亡的进程,但是并没有销毁,放弃了⼏乎所有的内存空间,没有任何可执⾏的代码,也不能被调度,仅仅在进程表中保留⼀个位置,记载该进程的ID,终⽌状态以及资源利⽤信息(CPU事件,内存使⽤量等等)供⽗进程⼿机
危害:占⽤进程号,系统所能使⽤的进程号是有限的,占⽤内存
孤⼉进程:
介绍:⼀个⽗进程已经结束了,但是它的⼦进程还在进⾏,那么这些⼦进程将称为孤⼉进程
孤⼉进程会被init结果,当这些孤⼉进程结束时由init完成状态收集⼯作
虚拟内存?
介绍:每个进程拥有独⽴地地址空间,这个空间被分为⼤⼩相等的多个块,称为页。每个页都是⼀段连续的地址,这些页被映射到物理地址,但并不是所有页都必须在内存中才能运⾏程序。当程序运⾏引⽤到⼀部分在屋⾥内存中的地址空间时,由硬件进⾏必要的映射,当程序引⽤⼀部分不在屋⾥内存中的地址空间时,由操作系统负责将缺失的部分装⼊物理内存并重新执⾏失败命令
特点:对于进程⽽⾔,逻辑上似乎有很⼤的内存空间,实际上其中⼀部分对应物理内存上的⼀块(称为帧,通常页和帧的⼤⼩相等),还有⼀些没加载在内存中的对应在硬盘上。
页⾯置换算法:
FIFO先进先出算法:在操作系统中经常被⽤到,⽐如作业调度
LRU最近最少使⽤算法:根据使⽤时间到现在的长短来判断
LFU最少使⽤次数算法:根据使⽤次数来判断
OPT最优置换算法:理论的最优,保证置换出去的时不再被使⽤的页
虚拟内存的好处:
在内存中可以保留多个进程,系统并发度提⾼
解除了⽤户与内存之间的紧密约束,进程可以⽐内存的全部空间还⼤
分页和分段的区别?
页式存储:⼀种⽤户视⾓内存与物理内存相分离的内存分配管理⽅案。将程序的逻辑地址划分为固定⼤⼩的页。⽽物理内存划分为同样⼤⼩的帧。没有外碎⽚,但会产⽣内碎⽚
段式存储:⼀种符合⽤户视⾓的内存分配管理⽅案,将程序的地址空间划分为若⼲段,如代码段,数据段,堆栈段,相互独⽴,互不⼲扰
区别:
⽬的不同:分页是由于系统管理的需要⽽不是⽤户的需要,他的信息是物理单位;分段的⽬的是为了能更好的满⾜⽤户的需要,他是信息的逻辑单位,它含有⼀组其意义相对完整的信息;
⼤⼩不同:页的⼤⼩由系统固定,⽽段的长度却不固定,由其所完成的功能决定
地址空间不同:段向⽤户提供⼆维地址空间,页⾯向⽤户提供⼀维地址空间
信息共享:段是信息的逻辑单位,便于存储保护和信息共享,页的保护和共享受限制
内存碎⽚:页式存储管理的优点是没有外碎⽚(因为页的⼤⼩固定),但会产⽣内碎⽚(⼀个页可能填充不满);⽽段式管理的优点是没有内碎⽚(因为段⼤⼩可变,改变段⼤⼩来消除内碎⽚)。但段换⼊换出时,会产⽣外碎⽚(⽐如4k的段换5k的段,会产⽣1k的外碎⽚)。
I/O多路复⽤,怎么实现?
介绍:指单个进程/线程可以同时处理多个IO请求
实现原理:⽤户将想要监视的⽂件描述符⽥间道select/poll/epoll中,由内核监视,函数阻塞。⼀旦有⽂件描述符就绪(读就绪或者写就绪),或者超时(设置timeout),函数就会返回
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论