OS相关八股文自述

1.什么是操作系统?
答:我认为操作系统首先是一个软件,它为其他软件调用计算机硬件提供接口,其次可以提供一个界面来方便用户与计算机交互。
2.什么是系统调用?
答:系统调用就是某些资源不能被用户随意使用,而是需要操作系统进行资源统一分发管理,如打印机,摄像头等等,系统调用就是来统一分发这些资源的接口。
3.用户态与内核态
答:用户态是运行用户程序时的状态,但是比如说此时有两个进程在运行,分别是qq和微信,当我们用微信在进行视频聊天的时候,qq进程如果也要调用摄像头,它不能一下子就抢夺摄像头这个资源吧,这样就会乱套,因此此时os还会有一个内核态,进入内核态后进行系统调用,进行统一的分发管理,形象来讲内核态更像一个管理部门,进行公正的管理统一资源。
4.进程和线程的区别,协程
答:进程是os资源的分配单位,就比如说打印机,摄像头这些资源是分配给某个进程的,线程则是cpu资源分配的单位,就比如说分配cpu去执行某一任务是线程干的事。且线程是存在与进程内的,一个进程内可以有多个线程,好比微信,在你可以利用微信与别人视频的时候,也可以与其他人聊天。视频与文字聊天就是两个线程,属于微信这个大进程。协程是一种用户态的线程,协程的调度程序员可以控制而无需进入内核态进行切换。协程拥有自己的寄存器和上下文,由于没有用户态与内核态的切换,因此上下文切换非常快,协程的存在使得单线程内也可以“并发”
5.进程有哪几种状态
答:new状态,这时刚刚初始化PCB,就绪状态,这时已经具备了除cpu以外的一切资源,运行态,拥有cpu并进行执行任务,阻塞态,当处在运行态的时候因缺少某些资源而进入阻塞态等待,结束态,程序执行完毕,销毁PCB。PCB是进程存在的标志,一个PCB里面主要包含有程序段,数据段等等资源的指针,以及程序计数器,代表着程序执行到哪条指令了,还有进程ID标识唯一的一个进程。协程是
5.进程间的通信方式
答:常见的大概有六种通信方式,分别为管道通信方式,消息队列,共享内存,信号量,信号,Socket。其中管道通信方式又分为匿名管道通信以及有名管道通信。其中匿名管道其实就是内核里面的一串缓存,从管道一端写另一端读。且只能用于父子进程或者兄弟进程之间的通信,因为管道本身其实父进程创建的,然后子进程或者兄弟进程共用一个管道,所以匿名管道只能用于父子或兄弟进程间的通信。有名管道则是创建了一个管道类型的文件,只要在进程中使用这个设备文件,就可以实现本机任意两个进程的通信。不过管道这种通信方式效率低,在一方读完之前另一方是被阻塞着的,只有对方读完之后,另一方在可以正常退出,所以不适合进程间频繁的通信。消息队列是保存在内核的消息链表,可以互相收发消息,如果进程从队列中读取了该消息,则该消息会被销毁。但是存在通信不及时问题,因为只有前面的消息被读取然后销毁后后面的消息才能被读取,且队列有大小限制,故不适合较大数据的传输。且上述两种都存在用户态与内核态的切换开销。共享内存机制则是os拿出一块共享的内存,进程间都可以访问它,谈及共享内存,此时也需要说信号量了,一般共享内存是与信号量一起使用的。信号量也就是P,V操作,P会将信号量-1,V会将信号量+1,这样的话,当信号量初始为1时就可以实现互斥访问,当信号量初始为0时也可以实现同步访问。信号通信方式一般是我们输入的命令,如我们通过kill -9终止某一个进程。Socket则是实现两台主机上的进程间的通信。
6.线程间的同步方式
答:操作系统一般提供三种线程同步的方式。分别是互斥量,信号量,以及事件。互斥量就是只有拥有互斥对象的线程才能访问公共资源,因为互斥对象只有一个,所以可以保证一个时刻只有一个线程在访问公共资源。类似与java 里面的sync关键字以及Lock类都是这种机制。信号量则是所说的PV操作,P-1,V+1,当发现信号量为0后则不能进行P操作,只有等V操作之后才可以。事件其实就是指的是等待唤醒操作,如消费者生产者模式,生产好了生产者睡眠并唤醒消费者,消费完了,消费者睡眠并唤醒生产者。
7.进程间的调度算法
答:我知道的进程间调度算法有六种。分别先来先服务调度算法,短作业优先调度算法,高响应比优先调度算法,时间片轮转调度算法,最高优先级调度算法,多级反馈队列调度算法。其中先来先服务调度就是哪个进程先被创建的就先执行,一个进程执行完了再去执行下一个。该调度算法的缺点是短作业有可能被饿死,迟迟得不到响应。从而有了有利于短作业的短作业优先调度算法。但该调度算法又对长作业不利,可能导致长作业被饿死。从而又有了高响应比优先的调度算法,响应比的算法是要求服务时间+等待时间比上要求服务时间,这样的话,在前期服务时间越短则响应比越高,但随着等待时间的边长,长进程作业的响应比会提高,这样就综合了短作业与长作业,但是也有个去缺点就是响应比是随着时间变化的,所以也会使得长进程得不到及时响应。时间片轮转调度算法则是每个进程执行相同时间,然后挂起等待下一次执行,该调度算法可以使得每个进程得到及时响应,但是不分进程的轻重缓急,使得重要进程得不到及时响应。于是就有了最高优先级调度算法,高优先级调度算法分为静态优先级和动态优先级。静态优先级则每个进程的优先级固定不变,动态的则会变化,如进程等待时间变长则提高优先级,若占用CPU时间过长则降低器优先级。多级反馈队列则是维护着一个拥有多个优先级的的队列,最上面的队列是优先级最高的,但是执行时间是最短的。举个例子就是,当一个进程被创建后,先放入第一个队列,被执行,若是在第一个队列没有执行完毕,则会放入第二级队列,优先级下降,但是执行时间提高,以此类推,越上面的队列优先级高可执行时间短,越下面队列优先级越低,可执行时间越长。这样可以使得短进程可以被很快的执行完,同时长进程也可以得到及时响应。
8.os的内存管理主要是做什么的
答:os的内存管理主要负责内存的分配与释放,同时逻辑地址到物理地址的映射也是内存管理的任务。
9.os的内存管理方式有几种
答:我所知道的os的内存管理方式有三种,分别是内存分段式,分页式,以及段页式。讲到这里还需要说一下虚拟内存。实现多进程的一个要求就是将每个进程的内存区分开来,如果多进程的内存不区分,就会十分混乱,可能进程1改了进程2的数据,进程2改了进程3的数据,故产生了虚拟地址,os利用MMU(CPU上的一个寄存器,内存管理单元)将每个进程的内存地址映射到不同的物理地址上,进行区分。上面说的三种内存管理方式,如分段式是有一个段表来进行虚拟地址与物理地址的转换,分页方式则有个页表,段页式既有段表也有页表,即先将逻辑地址映射到虚拟地址,然后将虚拟地址映射到物理地址。内存分段就是将内存分为一段一段,如程序段,数据段,栈段,堆段。这样的关系方式会造成许多内存碎片,由于解决内存碎片需要内存交换,就是先读到磁盘然后再顺着上一个段读入内存,由于段可能比较大,所以这个操作是比较耗时的。由于分段式会造成大量内存碎片,因此设计了分页式的内存管理方式,每个页大小是4kb,且内存分页式使得进程的物理地址可以非连续,同时也解决了内存碎片的问题,我对于分页式解决内存碎片的理解就是,好比自行车与汽车,当发生堵车时,自行车可以插空,而汽车则不可以。且就算分页的方式产生了内存碎片,进行内存交换时,由于页比较小,所以IO耗时也是比较短的。以及现在os里面大多是多级页表,这样就可以使得不需要程序可以先不用加载到内存,等需要的时候,会发生缺页异常,那个时候在装载需要的页。且分页方式利用计算机的局部性原理,还有设计了一个快表TLB,就是将经常访问的页加载到寄存器,这样使得访问更加快速(先访问TLB若没有命中则访问MUU)。段页式的内存管理方式,段页式的管理方式就是分段,然后在大段内进行小的分页,起初我对于段页式内存管理比较疑惑,为什么要有这个管理方式呢?通过查阅资料,我理解就是段页式的产生是历史原因。。。不知道这个原因合理不~就是在分页式管理方式出来之后,为了兼容之前的分段方式,故产生了段页式的管理方式。还有一个原因就是内存分页满足了os对内存管理的需求,但是并没有逻辑关系,而段则是有逻辑关系,如代码段,数据段这样更符合程序员的需求。
10.快表和多级页表
答:快表又叫TLB,是CPU上的一个寄存器,在内存分页的管理方式里,根据计算机著名的局部性原理,将一些经常访问到的表存储于TLB中,这样的话会使得查询更快,因为寄存器的存取速度本来快于内存,且无需地址转换。内存分页的管理方式首先会查询TLB,若TLB没有命中,则会向MMU进行进行查询。多级页表就是是相对于一级页表来说的。首先说一级页表带来的问题。假设os为进程分配4gb的虚拟内存,假设每个页表大小为4kb,那么4gb的内存会被分为1000000张页表,假设每个页表对应的页表项为4B,那么一个进程的页表大小为4MB,可以想想,若有100个进程,则需要400MB大小,这是非常大的内存了。此时就产生了多级页表,我们就拿2级页表举例。一级页表包含1024个页表项,映射到二级页表,二级页表拥有1024个页表,且每个页表拥有1024个页表项,我当时对于这个还是比较疑惑的,因为这样分不仅没有降低存储,反而多了4kb的一级页表,但是后来通过查阅资料得知,二级页表并不是全部加载进内存的而是需要的时候在加载,这样的话可能二级页表只加载了20%,那么这就节省了很大内存。加载过程就是当发生缺页的时候会产生缺页中断进入内核状态,然后将磁盘中程序的加载到内存。
11.分页机制和分段机制的异同
答:相同点是二者都需要MMU进行虚拟地址与物理地址的映射,不同点则是分页方式的每个页大小是固定的,而分段方式则不固定,它是根据程序大小决定的。且分段方式更容易产生内存碎片,内存交换效率较低
12.cpu虚拟寻址
答:cpu虚拟寻址指的就是cpu通过MMU内存管理单元,将虚拟地址映转换成真实地址,这样才能访问真实的内存。
13.为什么要有虚拟地址
答:总结来说就是将内存区分开供不同的进程使用。设想不使用虚拟地址,程序都是直接访问物理地址,这样会使得进程A修改了进程B的数据,进程B修改了进程C的地址,这样是无法支持多进程的。
14.什么是虚拟内存
答:我们平时启动的程序内存以及远远超过了电脑的实际内存,但同样还可以继续运行,就像我们在8g内存的电脑上运行一个要求8g内存的3A游戏时,同时还可以聊微信qq,这依赖于虚拟内存。虚拟内存的重要意义就是定义了一个连续的虚拟空间,并且把内存扩展到了磁盘上。就是把没有用到的程序先放到磁盘上,等用到的时候再加载到内存。
15.局部性原理
答:局部性原理是计算科学里一个重要的理论,局部性原理又分为时间局部性以及空间局部性。时间局部性是指在某一段时间内执行过的指令可能再一次被执行,原因就是程序中存在这大量的循环操作。空间局部性则是指访问了某个存储单元后,该单元的附近单元也可能被访问,原因是数据一般是以数组等形式存储的。
16.虚拟存储器
答:我理解的虚拟存储器就是一个概念,计算机可以为为应用程序提供一个虚拟的内存大小,即将用到的程序装载到内存,将暂时没用到的程序装载到磁盘,这样从宏观上看计算机好像为程序提供了一个比实际内存大的虚拟存储器。同时,我觉得虚拟存储器就是一个时间换空间的策略。用cpu的地址转换时间,页的调入调出时间来换取一个更大的虚拟空间来支持程序运行。
17.虚拟内存的实现
答:就拿分页的内存管理方式为例,在分页管理之上还有一个请求分页存储管理,它的功能就是在作业开始运行之前,仅将当前需要运行的程序装入内存,其余放入磁盘,在运行过程中发现需要的页面不存在时,分页存储管理器会产生缺页中断并进入内核态进行页面置换。当页面满了是,会根据页面置换算法进行页面的调出。
18.页面置换算法的作用以及常见的页面置换算法有哪些
答:地址映射过程中,当发现要访问的页面不存在时,则会发生缺页中断,当发生缺页中断的时候,内存中没有空闲的页面,页os必须选择移出部分页面来将需要页面调入。移出哪些页面这时候就需要页面置换算法了。常见的页面置换算法有OPT页面置换算法,该算法所选择的被淘汰的页面将是以后永久不会用到的,或者在最长时间内不被用到的,因为无法确定哪些页面之后不会被再用到,因此该算法无法实现,只是用作衡量其他算法。FIFO页面置换算法,总是淘汰先进入内存的页面,即选择待在内存时间最久优先调出,LRU页面置换算法,将未被使用时间最久的页面调出。LFU页面置换算法,将最少使用的页面置换出去。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值