转自:https://blog.csdn.net/csdn_chai/article/details/78002202

1.什么是操作系统?

OS是用户与硬件之间的接口,管理计算机的软件和硬件资源。

2.计算机的硬件包括:CPU、输入输出设备、存储器、总线等。

3.什么是进程?什么是线程?

进程是资源分配的独立单位,进程有独立的地址空间。是程序的一次执行,包含代码和数据。

线程是CPU调度的基本单位,线程使用父进程的数据空间,调度线程比调度进程更快,开销更小。

*资源分配中的资源是指:CPU时间、 存储器、文件和IO设备。

4.进程和线程的区别,相比进程,线程有哪些好处?

线程切换开销小。(我能想到的就这么多,具体是指哪些开销呢?我不知道)

区别:

1)一个进程可以有多个线程,多个线程可以并发。

2)进程和线程是不同的资源管理方式,进程拥有独立的地址空间,线程没有,同一进程的线程共享数据

3)线程不占用系统资源,调度线程比调度进程开销小。

4)对于要求同时进行并且共享变量,只能使用多线程。

但是到底进程切换都有哪些操作呢?如果明白了肯定会加深这个的理解。

转自:https://blog.csdn.net/shadow2512/article/details/73611805

概念:进程切换就是被中断进程与待运行进程之间的上下文切换(必须在内核模式下进行进程切换)。

具体过程

转换为内核模式,压入程序状态字和程序计数器,将被中断进程的栈指针保存到进程控制块,调整被中断进程的状态,把被中断的进程加入相关队列等待,选中下一个进程改变其状态,设备被选中的进程的地址空间,将被选中进程的栈指针存到处理寄存器中;切换到用户模式并且弹出程序状态字和程序计数器。

进程切换发生在时间片中断、IO中断;终止系统调用、发生异常。

//看完上边这个还是不太懂啊,很抽象啊。

上下文包括:通用目的寄存器,浮点寄存器,程序计数器,用户栈,状态寄存器,内核栈,各种内核数据结构。

内核可以处于进程上下文和终端上下文

5.进程间通信的方式?

Linux和windows都有的通信方式:管道、socket、共享内存、消息。

但是具体都是怎么操作的呢?不知道

6.线程同步?进程同步?是什么?方式有哪些?

线程同步是指多线程通过特定的方式来控制线程之间的执行顺序(同步)。

1)互斥量。只能有一个线程访问公共资源,拥有互斥对象才能访问公共资源,保证公共资源不会被多个线程同时访问。

2)信号量。保证了访问公共资源的最大的线程个数。

3)临界区,同时只能由一个线程进入临界区,互斥访问。

//进程同步:信号量、管程、分布式系统。

7.那么什么是临界区呢?

临界区就是每个进程中访问临界资源的那段代码,不能多个进程同时进入。

1)如果一个进程进入了临界区,那么其他进程等待;

2)如果当前进程不能进入临界区,那么就要释放CPU资源。

3)进入临界区的进程有访问控制时间,以便其他进程进入。

比如访问打印机的代码,

实现临界区:软件实现,中断屏蔽,硬件指令法。

8.进程有几种状态?及其之间的转换?

就绪:进程已经获得了除CPU以外的所有资源,正在等待CPU调度。

运行:获得了CPU资源。

阻塞:进程等待某些条件,在某些条件达成前无法执行。

需要注意的是:运行到就绪状态转换是超时、时间片用完。

9.进程创建的过程

1. 给进程分类一个唯一的标识符

2.给进程分配存储空间

3.初始化进程控制块PCB(PCB见下)

4.放入队列,等待CPU资源。

10.PCB保存了哪些信息?

保存了进程的标识信息(进程的id),进程的状态信息(就绪、运行、阻塞),进程的控制信息(调度相关信息:进程优先级;正文段指针、数据段指针)

系统对进程的管理通过管理PCB实现;每个进程创建时否会分配PCB,在进程撤销时,收回PCB;提供进程调度需要的资源。

11.进程调度的几种算法?

1)时间片轮转调度:给每个进程固定的时间片来执行,按照顺序,时间片使用完了之后就执行下一个。属于抢占式调度,平均等待时间较长,而且上下文切换频繁,

2)先来先服务:属于非抢占调度,实现简单,但是对短作业不利。

3)多级反馈队列调度:多个优先级队列,根据优先级的降低时间片长度增加,先执行优先级高的,每个队列内部使用时间片轮转,如果没在当前时间片内执行完,那么就放到下一优先级队列的队尾;高优先级队列为空时,去执行低优先级队列内容。

12.进程调度和线程调度

两者均有3种状态,当线程进行系统调用时会阻塞进程,但是线程还是处于运行态,不会阻塞。

用户级线程和内核级线程不太懂欸。

13.什么是死锁?

在两个以上的并发进程中,每个进程都保持某种资源,并且申请其他进程所占用的资源,而且又有循环等待,无法推进。

条件:互斥、循环等待(若干进程首尾相连形成环等待关系)、非剥夺(无法在进程结束前剥夺对资源的占有)、请求与保持(一个进程请求资源时,不释放自己占有的资源)

如何解决死锁?

1)死锁预防。

破坏后三个条件:

a.破坏循环等待,就是不让申请资源形成环路。对资源排序,进程如果申请到了R资源,那么下次只能申请排在R后面的,不能申排在其前面的,定制一个规则。

b.破坏非剥夺。当无法得到自己申请的资源时,先释放自己的资源,等需要时再申请。

c.破坏请求与保持条件,在程序运行前,必须申请所有需要的资源。(感觉b和c有点像啊!)

2)死锁避免

没有采取上边三个措施预防,而是在资源动态分配的过程中,防止系统进入不安全状态。

代表算法:银行家算法。

寻找安全的进程序列,安全才分配资源。

对每个进程查看现在资源能否满足 其所需资源,如果可以,那么就分配,并且现有资源要变为现在有的资源数+已经分配进程的资源。

再对下一个进程进行同样的判定。看是否存在安全序列,如果存在才分配资源。

//没复习之前看见这两个感觉都是一样的,并且根本就不知道其中指的内容是什么。

死锁检测与解除:

资源分配图(其实看见资源分配图已经不知道是什么了)

转自:https://blog.csdn.net/ai977313677/article/details/72780203

有边和节点,边表示对资源的申请和占有,点表示进程,是有向图。

如果图中存在环路,那么可能存在死锁;如果图中不存在环路,那么肯定不存在死锁。

14.线程/进程同步和PV操作

//不知道这个会不会考到啊,但是好像什么都不记得了,还是复习一下吧!

-读者-写者问题

-生产者消费者

-哲学家就餐问题

1)读者写者问题

读文件时其他进程也可以读;写文件时,其他进程不能读也不能写。

读者优先

将所有读者读完,才允许写者进来,会导致写者饥饿。

怎么实现呢?

这个就说的很好,有三个变量,因为readercount是一个全局的,那么它需要有个锁来保持它的更新统一。

当有读者时,读者数量++,如果是第一个读者,那么就P读写文件的互斥量;如果最后一个读者已经读完,那么就V互斥量,允许写者写了。

写者优先

那么就让写者一直进来,对写者进行计数,如果是第一个写者,那么就将读取的锁P,如果是最后一个写者,那么就将读取的锁V;读者的代码是不变的。

总之就是对读者写者分别计数,第一个和最后一个的情况要做P和V的操作。

2)哲学家就餐问题

每次最多只允许4位哲学家拿左筷子,这样就可以允许有一位哲学家就餐,就餐完之后放下筷子,。

3)生产者-消费者问题

消费者不能消费空的缓冲区,生产者不能向满的缓冲区产生数据。

那么在运行生产者代码的时候先P一下empty判断是否是满的,并且对缓冲区的访问也是互斥的,有一个互斥量;生产完之后就V一下通知缓冲区有内容。

消费者也是如此,通知缓冲区有空闲。

15.互斥量和信号量

互斥量是一种特殊的信号量。

互斥量:它总被初始化为1,它的PV操作是在一个函数内,主要就是对临界区的进行封锁。

信号量:它是线程间通信的方法,PV操作在两个线程中,PV操作在两个线程中,通常一个线程释放信号量,另一个在信号量上排队。初始化为非负数0~n.。

16.什么是物理内存?虚拟内存?

转自:https://blog.csdn.net/li187li/article/details/52802127

物理内存是实际的内存,在CPU中指的是寻址空间的大小,比如有20根总线,那么寻址空间就是1MB,32位内存寻址就是4GB。

那么为什么需要虚拟内存呢?

因为物理内存大小是有限的,如果现在运行的一个进程需要的内存可能是大于物理内存的,那么就不能所有的数据都加载到物理内存中,那么剩下的部分就需要先放到磁盘中,等需要时再调入内存,所以虚拟内存是进程运行时所用的内存空间的总和,并且有一部分是不在物理内存当中的

什么是虚拟内存地址和物理内存地址呢?

计算机内存是分页的,有一个页表,映射虚拟内存页到磁盘,操作系统有页面失效功能,操作系统找到一个最少使用的页帧,并且将其写入磁盘,将需要访问的页调入内存,并且修改页表项的映射,保证了所有的虚拟页都会被调度。这就是处理虚拟内存到物理内存的步骤。

转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html

在每个进程创建加载时,内核只是为进程创建了虚拟内存的布局,初始化PCB中的相关链表,建立起虚拟内存和磁盘的映射关系,并不需要立即把进程的程序和数据拷贝到物理内存中,等运行到对应的程序时,才通过缺页中断调入内存。

虚拟空间都被映射到了磁盘空间中,由页表映射到磁盘文件中,当访问到某个位置的时候,通过页表项判断是否在内存中,如果不是则缺页中断或会发生页面替换

17.内存分区

四种:固定分区(内部碎片)、动态分区、分页、分段。

动态分区:最佳适配、首次适配、下次适配(从上次放置的位置开始选择一个满足大小的空闲块)

分页和分段的区别:

页表项映射到内存块中,每次CPU存取一个数据,都要两次访存,一次是访问页表,一次是访问实际物理地址,可以增加一个快表,

页面置换算法包括:NRU最近未使用、FIFO先进先出、尔二次机会等。

分段:

OS知识点总结的更多相关文章

  1. 关于iOS和OS X废弃的API知识点

    今天在查看苹果接口文档时,突然对于接口的声明知识点比较感兴趣,再网络找到下面这个比较不错的文章,记录一下并分享: 如你所知,已废弃(Deprecated)的API指的是那些已经过时的并且在将来某个时间 ...

  2. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  3. Python OS模块重要知识点

    Python OS模块重要知识点 这几点很重要,主要是关于文件路径,我之前踩了很多坑,今天总结一下,方便以后能够避免与path相关的各种坑! 1,首先我们想获取某个文件夹下面的所有文件夹以及文件(不包 ...

  4. python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块

    一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...

  5. [OS] 线程相关知识点

    操作系统中引入进程的目的,是为了描述和实现多个程序的并发执行,以改善资源利用率以及提高系统吞吐量.那为什么还需要引入线程呢?下面我们先来回顾一下什么是进程: 进程有两个基本属性:·资源的拥有者:给每个 ...

  6. [OS] 进程相关知识点

    进程概念: 1.程序在执行中 2.一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位. 进程与程序的差别: ·进程----动态, 程序----静态 ·进程 ...

  7. Python知识点: os.popen

    用例:f = os.popen("%s %s %s" % ("pkg-config", " ".join(args), mod)) pope ...

  8. python--基础知识点梳理(三)深浅拷贝、进线协程、os和sys、垃圾回收机制、读文件的三种方式

    深拷贝与浅拷贝 import copy 浅拷贝:将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象.copy.copy() 深拷贝:将一个对象拷贝到另一个对象中,新开辟了一个 ...

  9. [OS] 死锁相关知识点以及银行家算法详解

    因此我们先来介绍一下死锁: 死锁特征 当出现死锁时,进程永远不能完成,并且系统资源被阻碍使用,阻止了其他作业开始执行.在讨论处理死锁问题的各种方法之前,先深入讨论一下死锁的特征. ·必要条件 (1)互 ...

随机推荐

  1. 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)

    图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面. 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉 ...

  2. MyBatis 使用简单的 XML或注解用于配置和原始映射

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .My ...

  3. MyBatis 是一款优秀的持久层框架

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  4. linux -- Ubuntu14.04及之后版本重启网卡不生效

    Ubuntu14.04修改配置,重启网卡没有生效,出现如下问题: service networking restart //重启网络服务 stop: Job failed while stopping ...

  5. 查看SQLServer数据库每个表占用的空间大小

    创建存储过程: CREATE PROCEDURE [dbo].[sys_viewTableSpace] AS BEGIN SET NOCOUNT ON; CREATE TABLE [dbo].#tab ...

  6. 用Powershell调用DLL文件

    http://blog.csdn.net/itanders/article/details/5702771

  7. Redis分布式锁,基于StringRedisTemplate和基于Lettuce实现setNx

    使用redis分布式锁,来确保多个服务对共享数据操作的唯一性一般来说有StringRedisTemplate和RedisTemplate两种redis操作模板. 根据key-value的类型决定使用哪 ...

  8. 自己实现一个Promise库

    源码地址 先看基本使用 const promise = new Promise((resolve, reject) => { resolve(value) // or reject(reason ...

  9. sql语句优化 (转)

    性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...

  10. c#基础 第六讲

    烧开水 先询问:“是否要烧开水(Y/N)” 是的话执行--0°--100°(30°---水温了,50°---水热了,80°---水快开了,100°---水已经开了, 结束.) 判断 循环 选择 跳转 ...