操作系统原理

操作系统原理的总结,结合常见问题

什么是中断

中断是指计算机运行过程中出现意外情况干预,机器暂停正在运行的程序,转入新程序,处理完后返回被暂停的程序继续执行

中断的分类

外中断(IO),异常,陷入(系统调用)

什么是用户态

只能受限的访问内存,且不允许访问外围设备,占有CPU的能力被剥夺,CPU资源可以被其他程序获取

什么是内核态

CPU可以访问内存所有数据,包括外围设备

为什么要有用户态和内核态

需要限制不同程序之间的访问能力

如何从用户态进入内核态

系统调用、中断、异常

介绍一下缓存

通过将最近使用的资源存储到缓存中,实现资源的快速读取

什么是缓存溢出

超出常规长度的字符填满一个域

介绍一下进程与线程的区别以及使用场景

进程是资源调度的基本单位,线程是独立运行的基本单位

进程有资源,线程没有

进程开销大,线程开销小

线程可以直接读取同一进程的数据,进程通信需要IPC

需要安全稳定时用进程,等待慢速IO时交给线程,接着做其他事情

进程状态有哪些

执行状态,阻塞状态,就绪状态

进程调度算法的特点

先来先服务(FCFS)短作业优先(SJF)最短剩余时间优先(SRTF)时间片轮转,优先级调度,多级反馈队列,重要进程立刻响应

线程的实现方式

C++11引入,通过std::thread obj(函数指针/函数对象)实现多线程

介绍一下协程

协程比线程更轻量,本质是单线程,一个线程可以拥有多个协程

协程的作用

协程不被操作系统内核管理,完全由程序控制(用户态),开销远小于线程

协程的缺点

本质是单线程,进行阻塞操作时会阻塞整个程序

进程同步的机制

临界区、同步与互斥、信号量、管程

信号与信号量的区别

信号是处理进程间异步通信的

信号量是处理同步通信的

生产者-消费者实现

队列不满时生产者可投放,队列不为空时消费者可取出

读者写者实现

允许多进程同时读,但不允许读和写,写和写同时发生

哲学家进餐实现

五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子

必须同时拿起左右两根筷子,两个邻居都不进餐时才可进餐

进程通信的方式及特点、应用场景

管道(父子,半双工),命名管道(去除父子限制),消息队列(避免同步阻塞问题,有选择接收),信号量,共享存储,套接字

死锁的必要条件

互斥、占有等待、不可抢占、环路等待

解决死锁的策

死锁检查与回复,死锁预防,死锁避免

什么是虚拟内存

让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存

虚拟内存的作用

扩充内存

虚拟内存的实现

分页系统+页面置换算法

页面置换算法原理

最佳(OPT,最长时间未使用),LRU(最近最久未使用)时钟(clock)

什么是分页管理

将地址空间分成固定大小的页,每一页与内存映射

什么是分段管理

分段,每段一个独立地址空间,段长可变

介绍一下段页式

分段,每一段分页

分页与分段的区别

分页透明,分段需要显示划分段的大小

分页是一维地址,分段是二维地址

页的大小不可变,段的大小可变

分页是为了实现虚拟内存,分段是为了是程序和数据逻辑上独立

静态链接的不足

动态链接的特点

向操作系统申请4G连续空间能分配吗

不能,正常32位字体,一个进程的虚拟地址空间就是4G,栈,堆,数据段,代码段公用这4G

  • © 2020 QSH
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信