操作系统(OS)部分知识随笔

老规矩,先扔概念

操作系统(OS):管理控制计算机硬件和软件资源的计算机程序

1.操作系统是计算机资源的管理者

1.进程管理2.内存管理3.文件管理4.网络管理5.驱动管理

其实具体来说:
处理机管理(进程控制、进程同步、进程通信、死锁处理、处理机调度)
存储器管理(提高内存利用率,内存的分配与回收、地址映射、内存保护与共享、内存扩充)
文件管理(计算机中的信息都是以文件的形式存在的)
设备管理(完成用户的I/O请求,方便用户使用设备、并提高设备的利用率)
2.操作系统为用户提供使用计算机硬件系统的接口
命令接口(用户通过控制台或终端输入操作命令,向系统提供各种服务要求)
程序接口(由 系统调用 组成,用户在程序中使用这些系统调用来请求操作系统为其提供服务)
图形接口 常见的 图形用户界面GUI (终还是通过调用程序接口实现的)
3.操作系统用作扩充机器
没有任何软件支持的计算机称为裸机,实际呈现在用户面前的计算机系统是经过若干层软件改造 的计算机。操作系统将裸机改造成功能更强、使用更方便的机器。我们将覆盖了软件的机器称为 扩充机器或虚拟机。

进程和线程

进程:1.动态过程 ⒉绑定着一个程序 3.允许同时存在 4.OS内部进行资源申请的最小个体

简单来理解就是一个程序(指令+数据)的一次执行过程,如果把程序比作菜谱,那么进程就是一次做菜的过程

进程:OS进行资源分配的基本单位(不包含CPU资源)

线程:OS进行调度的单位(CPU资源)

线程vs进程

1.概念区别
2.由于进程把调度单位这一个职责让渡给线程了,所以,使得单纯进程的创建销毁适当简单
3.由于线程的创建和销毁不涉及资源分配、回收的问题,所以,通常理解,线程的创建/销毁成本要低于进程的成本

进程和线程的区别


1.进程(Process)是系统进行资源分配和调度的基本单位,线程(Thread)是CPU调度和分派的 基本单位;
2.线程依赖于进程而存在,一个进程至少有一个线程;
3.进程有自己的独立地址空间,线程共享所属进程的地址空间;
4.进程是拥有系统资源的一个独立单位,而线程自己基本上不拥有系统资源,只拥有一点在运行 中必不可少的资源(如程序计数器,一组寄存器和栈),和其他线程共享本进程的相关资源如内存、 I/O、cpu等;
5.在进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的CPU环境 的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可 见,进程切换的开销远大于线程切换的开销;
6.线程之间的通信更方便,同一进程下的线程共享全局变量等数据,而进程之间的通信需要以进 程间通信(IPC)的方式进行;
7.多线程程序只要有一个线程崩溃,整个程序就崩溃了,但多进程程序中一个进程崩溃并不会对 其它进程造成影响,因为进程有自己的独立地址空间,因此多进程更加健壮

为什么OS要引入线程这一个概念。
由于进程这一个概念天生就是资源隔离的,所以进程之间进行数据通信注定是一个高成本的工作。现实中,一个任务需要多个执行流一起配合完成,是非常常见的。
所以,需要一种方便数据通信的执行流概念出来,线程就承担了这一职责。


进程和程序的区别


(1) 程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂 时的; (2)程序是静态的观念,进程是动态的观念; (3)进程具有并发性,而程序没有; (4)进程是竞争计算机资源的基本单位,程序不是。 (5)进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个 进程可以执行一个或几个程序

进程调度:

同一个进程中的资源是共享的(如果存在比进程更低级的单位,是共享的);不同进程之间的资源,是隔离的。
A进程只能访问A进程自己的资源(这里主要讨论内存);A进程无法访问
更无法访问被OS直接管理的资源。

常见的进程调度算法:

1.先来先服务 first-come first-serverd(FCFS)
按照请求的顺序进行调度。非抢占式,开销小,无饥饿问题,响应时间不确定(可能很慢);
对短进程不利,对IO密集型进程不利。
2.最短作业优先 shortest job first(SJF)
按估计运行时间短的顺序进行调度。非抢占式,吞吐量高,开销可能较大,可能导致饥饿问 题;
对短进程提供好的响应时间,对长进程不利
3.优先级调度算法
为每个进程分配一个优先级,按优先级进行调度。为了防止低优先级的进程永远等不到调度,可 以随着时间的推移增加等待进程的优先级。
4.时间片轮转
将所有就绪进程按 FCFS 的原则排成一个队列,用完时间片的进程排到队列后。抢占式(时间 片用完时),开销小,无饥饿问题,为短进程提供好的响应时间;
若时间片小,进程切换频繁,吞吐量低;若时间片太长,实时性得不到保证。
5.最高响应比优先
响应比 = 1+ 等待时间/处理时间。同时考虑了等待时间的长短和估计需要的执行时间长短,很好 的平衡了长短进程。非抢占,吞吐量高,开销可能较大,提供好的响应时间,无饥饿问题。
6.多级反馈队列调度算法
设置多个就绪队列1、2、3…,优先级递减,时间片递增。只有等到优先级更高的队列为空时才会 调度当前队列中的进程。如果进程用完了当前队列的时间片还未执行完,则会被移到下一队列。
抢占式(时间片用完时),开销可能较大,对IO型进程有利,可能会出现饥饿问题。

如果想要做好进程调度,需要注意哪些

1.需要把进程(程序执行的过程)这个抽象的概念,用数据表示处理——面向对象的思想变成数据,才能被计算机进行处理(才能被OS这个软件进行处理)

⒉需要对进程做个区分:哪些现在可以分配CPU了,哪些现在还暂时还没有准备好通过对进程做状态划分,来区分出处于不同情况下的进程状态。


 

->新建:随着程序的启动运行
新建->就绪:进程的初始化工作完全完成(这个工作是由OS的指令完成的)

就绪->运行:进程被OS选中,并分配了CPU之后
运行->结束:进程的最后一条指令执行结束
运行->就绪:1.被高优先级的进程抢占了⒉时间片耗尽3.进程可以执行一些OS提供的系统调用,主动放弃

运行->阻塞:等待一些外部条件:等待IO设备;进程休眠一段时间; ....
阻塞->就绪:外部条件满足:IO数据来了;休眠时间到了...
结束->︰进程PCB彻底被OS回收了 

3.现在手上有等待分配CPU的所有进程列表——就绪队列

4.OS什么时候会介入进程调度:需要选择一个新的进程,进行CPU分配
1.一个新的进程刚处于就绪状态时,当该进程的优先级较高时——具备这种能力的OS被称为抢占式(实时)

2.运行状态的进程->结束。一个进程结束了
3.OS每隔一段时间,会调度一次∶进程的时间片耗尽
4.进程主动放弃CPU     1.运行->阻塞⒉.运行-→>就绪

5.操作系统 OS的具体切换是通过上下文切换。

并行和并发

并行:进程真的同时在执行(微观角度的同一时刻,是有多个指令在执行的,所以只会在多CPU多核场景下)
并发:进程假的同时在执行(微观上,表现为一次只执行一个进程,但宏观上,多个进程在“同时”执行)

这里提到一下用户态和内核态,CPU执行OS指令的时候就是内核态,执行普通进程指令的时候就是用户态。

一些结论:内核态权限高,性能较差,

                  用户态权限低,性能较好。

内存管理

内存管理的主要功能:

① 内存的分配和回收:实施内存的分配,回收系统或用户释放的内存空间。
② 地址变换:提供地址变换功能,将逻辑地址转换成物理地址。

③ 扩充内存:借助于虚拟存储技术活其他自动覆盖技术,为用户提供比内存空间大的地址空间, 从逻辑 上扩充内存。
④ 存储保护:保证进入内存的各道作业都在自己的存储空间内运行,互不干扰。

这里提到几个算法

(1) 首次适应(First Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能 满足要求的第一个空闲分区。
(2) 最佳适应(Best Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分 区。
(3) 最差适应(Worst Fit)算法:又称大适应(Largest Fit)算法,空闲分区以容量递减的次序链 接。找到第一个能满足要求的空闲分区,也就是挑选出大的分区。
(4) 邻近适应(Next Fit)算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分 配

1.线性地址和虚拟地址

物理地址:真实的内存中的地址
线性地址:物理地址被OS进行转换后的一个地址

2.进程间的通信

理论上,进程之间是独立的,但实际中,往往是多个进程之间互相配合,来完成复杂的工作。

进程间通信的常见方式:
1.管道(pipe)

2.消息队列(message queue)

3.信号量(semaphore)

4.信号(signal)

5.共享内存(shared memory)

6.网络(network)

死锁

1.死锁的定义
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力 作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等 待的进程称为死锁进程。
2.死锁原因:

① 系统资源不足(对不可剥夺资源的竞争) ② 进程推进顺序不当(P1拥有A申请B,P2拥有B申请A)
3.产生死锁的必要条件:
互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占 用。
请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其 它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释 放
环路等待条件:指在发生死锁时,必然存在一个进程资源的环形链。
4.处理死锁的基本方法:
预防死锁:这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏 产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方 法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统 吞吐量降低。
避免死锁:该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生 死锁的的四个必要条件,而是在资源的动态分配过程中,用 某种方法去防止系统进入不安全状 态,从而避免发生死锁。
检测死锁:这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全 区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死 锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死 锁清除掉。
解除死锁:这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死 锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源 分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
什么是饥饿?与死锁有什么差别?
等待时间给进程推进和响应带来明显影响时成为进程饥饿。
饥饿并不代表系统已经死锁,但至少有一个程序的执行被无限期地推迟。 差别: ① 进入饥饿的进程可以只有一个,但是死锁必须大于等于两个; ② 出于饥饿状态的进程可以是一个就绪进程,但是死锁状态的进程必定是阻塞进程。
银行家算法
主要思想是避免系统进入不安全状态,在每次进行资源分配时,它首先检查系统是否有足够的资 源满足要 求,如果有,则先试行分配,并对分配后的新状态进行安全性检查。如果新状态安全,则正式分 配上述资 源,否则拒绝分配上述资源。这样就保证系统始终处于安全状态,从而避免死锁现象的发生。
死锁定理
如果资源分配图是可以完全简化的(能消去所有的边),则没有死锁。

随笔就先写到这里,最近复习的用到的目前只有这些,关于文件,IO,磁盘调度之类的知识点,等以后需要用时我再写一篇方便复习吧。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值