操作系统知识点总结
一、计算机系统概述
-
什么是操作系统?操作系统的作用
-
- 操作系统的本质是软件,管理计算机的硬件资源和软件资源的软件。
-
什么是系统调用?
-
- 进程在CPU上的运行级别分为用户态和内核态,与系统资源相关的操作都必须通过向操作系统请求,由内核态的进程来代为完成,这就是系统调用。操作系统中与系统资源相关的进程都需要用的系统调用。
-
外中断和内中断的区别?
-
- 外中断是CPU外部发出中断信号引起的中断处理,如 I/O操作等;而内中断是CPU内部导致的中断处理,如除0,内存溢出等。
-
操作系统中断的过程?
-
- CPU接收到中断信号 -> 保存当前进程的执行环境 -> 根据中断信号转入对应的中断处理程序 -> 中断处理程序执行完成后,重新恢复原进程的执行环境 -> 继续执行原进程
二、进程管理
-
进程、线程、协程的区别?
-
- 进程:操作系统中资源分配的最小单位,同一时刻执行的进程数不会超过CPU核心数
- 线程:是作业执行的最小单元,同一个进程下的多个线程共享进程的资源
- 协程:又称微线程,是一种用户态的轻量级线程;类似于线程,但是调度完全由用户控制;没有内核态的切换,故效率非常高。
-
CPU的核心是和线程还是进程对应?
-
- 进程
-
能把某个用户进程或线程锁定在某个cpu核心上执行吗?
-
- 可以的
-
进程有哪几种状态?
-
-
进程间的通信方式,几种,有什么特点?
-
- 共两类,五种。
- 低级通信方式:PV操作
- 高级通信方式:共享内存、消息传递(点对点、广播)、管道通信(匿名管道、有名管道)、socket套接字 - 用于网络通信
-
Java中线程的同步方式,哪几种,什么特点?
-
- 互斥量:采用互斥对象机制,同一时间只有一个线程能访问,如 synchronized、Lock实现。
- 信号量:同一时间可以多个线程访问,但是限制访问量。
- 事件:通知线程的方式,如 wait/notify。
-
进程调度算法,几种,什么特点?
-
- 先到先服务、短作业优先、时间片轮转、多级反馈队列、优先级调度
-
什么是死锁?死锁的几个必要条件?
-
-
两个或以上进程,相互持有对方所需要的资源,且一直在等待自己所需要的资源,如果没有外力干预,它们会永远阻塞。
-
死锁的四个必要条件:
-
- 互斥性:等待的资源是互斥访问的
- 不可剥夺性:所持有的资源不能被强制剥夺,只能等待进程执行完毕后主动释放
- 持有和请求性:互相持有其他进程所需要的资源且再申请自己所需要的资源
- 循环等待性:每一个进程都在等待其他进程释放自己所需要的资源,形成一个等待闭环。
-
-
怎么解决死锁?
-
-
解决死锁有三个角度:预防、避免、检测和解除
-
- 预防:破坏任一死锁产生的必要条件就行,如一次性分配给进程所需要的全部资源,破坏持有和请求性、或者分层分配资源,破坏循环等待性。
- 避免:引入安全序列和安全状态概念,每一次分配资源前采用银行家算法判断本次分配是否安全
- 检测和解决:采用资源分配图检测是否已经出现死锁,如果出现死锁,可以采用重启、撤销进程、抢占资源等解决死锁。
-
三、内存管理
-
常见的几种内存管理方式?什么特点?
-
- 连续(块式)、非连续(分页式、分段式、段页式)
- 块式:将内存分为固定大小或者动态大小的块来存储进程数据
- 分页式:将所有内存分为固定大小的页框,进程分为与页框大小相等的页,建立页表。缺点是进程划分没有逻辑。
- 分段式:按照进程中的逻辑关系将进程分为不同大小的段,根据段的大小分内存。缺点是可能有的段特别大,不好管理。
- 段页式:先将进程分为段,在将段分成页。解决了前两者的缺点。
-
快表和多级页表是什么?什么作用?
-
- 段页式内存管理中,最需要解决的问题就是索引查询速率和页表太大问题,通过引入多级页表,可以解决页表过大问题,再引入快表,可以降低访存次数,加快页表查询速率。多级页表就是索引套索引,最后一层才是真正的物理地址;快表就类似于我们平时用的Redis,用作常用数据的缓存,避免查询数据库。
-
分页机制和分段机制的区别和共同点?
-
-
相同点:
-
- 都提高了内存利用率,减少了内存碎片
- 都适用于非连续内存管理
-
不同点:
-
- 页的大小是固定的,由操作系统决定;而段的大小是不固定的,由进程决定
- 分页满足的是操作系统内存管理的需要,按照固定大小分的;而分段满足的是进程的需要,按照逻辑信息来分的
-
-
虚拟地址(逻辑地址)和物理地址是什么?引入虚拟地址有什么好处?
-
-
物理地址是内存硬件所具有的的属性,是真实存在的。而虚拟地址是操作系统为了方便管理而产生的。
-
引入虚拟地址的好处:
-
- 内存管理中,可以利用连续的虚拟地址映射离散的物理地址,方便操作系统管理内存
- 不同的进程使用虚拟地址彼此隔离,保证进程间的资源安全
- 引入虚拟地址,才能实现虚拟内存技术。
-
-
虚拟内存技术是什么?怎么理解?
-
- 根据局部性原理,在程序加载时,只加载最近会用到的资源进内存,如果运行时遇到资源不存在,则由操作系统负责去外存中加载,当内存空间不足时,通过页面置换算法加载需要的资源,在操作系统的管理下,运行时候内存好像大于实际内存,这就是虚拟内存技术。
-
什么是局部性原理?
-
- 时间局部性:当内存中一个资源被访问时,在最近一段时间间隔内,该资源可能被再次访问。(比如循环)
- 空间局部性:当内存中一个资源被访问时,在最近一段时间间隔内,与该资源相邻的资源可能被访问。(因为内存中的进程资源大多是连续存储的,访问了前一个,后一个可能紧接着被访问)
-
虚拟内存技术的实现?
-
- 请求分页内存管理
- 请求分段内存管理
- 请求段页式内存管理
- 这三者与基本XX内存管理的具体实现几乎一样,只是在进程加载时,不一次性全部加载到内存,而是根据虚拟内存技术的原理,优先加载最近一段时间间隔会用到的资源,程序开始运行后,遇到缺页的情况再从外存中添加,内存满了就用页面置换算法置换最近时间间隔用不到的资源到外存,换需要的资源进内存。
-
页面置换算法有哪些?什么特点?
-
- 最佳页面置换算法(OPT)
- 先进先出(FIFO)
- 最近最久未使用(LRU,Least Recently Userd)
- 时钟置换算法(CLOCK)
-
什么函数使得用户进程将内核缓冲区当中的数据拷贝到进程中?
-
- read
- 【注】read是把数据从内核缓冲区复制到进程缓冲区。write是把进程缓冲区复制到内核缓冲区。
四、文件管理
-
linux的删除操作是什么?为什么叫remove不叫delete?
-
- delete:删除,remove:移除。
-
- 因为操作系统中的文件存放在磁盘中,我们查询文件是通过索引查找到物理块的地址从而读取到文件信息,删除的时候其实是删除的是索引,数据没有被抹掉,所以用移除更合适一点吧。
-
linux一切皆文件的理解
-
- 操作系统的文件系统中,所有的文件、包括目录都是存放在磁盘块中,每个磁盘块有确定的物理地址,查询文件时也是根据物理地址的索引来获取的。同理,Linux将所有东西,包括IO设备,都以文件的形式处理,形成一个索引表,调用IO设备就用文件操作方式打开文件一样,根据名称检索索引表找到物理地址然后打开。
五、IO管理
-
键盘敲一个字符,显示到word里,操作系统完成了什么工作?
-
- 首先 键盘控制器产生扫描码数据,并将其缓存到键盘控制器的寄存器后,在通过总线给CPU发送中断请求
- CPU收到中断请求之后,操作系统保持CPU的上下文,然后调用键盘的中断处理程序
- 键盘中断处理程序 从键盘控制器的寄存器中读到扫描码,然后找到对应的字符,并把它翻译成对应的ASCII码,并将其放入读缓冲区队列
- 然后显示器从读缓冲区队列拿到ASCII码,将其放入写缓冲区队列,然后将写缓冲区队列的数据从显示器控制器的寄存器中拿出来显示在屏幕上。
-
IO线程越多越好么?为什么?
-
- 不是,因为每一个IO线程会涉及到中断,如果太多的IO线程的话,CPU会频繁发生中断操作,资源利用率低。
-
操作系统IO全过程
-
- 第一步:CPU给设备控制器发送一条I/O指令
- 第二步:设备控制器开始执行IO任务(简写了)
- 第三步:当设备控制器执行完成后,向CPU发送一个中断信号
- 第四步:CPU收到中断信号后,开始执行对于的中断处理程序,执行完成后,IO结束。
-
IO多路复用是什么?底层原理?