操作系统复习

什么是操作系统?

操作系统就是内核态的一种软件。应用在程序和硬件之间的媒介,向程序提供硬件的抽象管理硬件资源

操作系统的功能?

计算机组成:CPU、存储器、输入、输出、控制单元

所以有:

CPU管理:CPU的管理和分配,主要是指进程管理;

内存管理:内存的管理和分配,主要是利用虚拟内存的方式(虚拟内存见下面);

外存管理:磁盘等的管理和分配,将硬盘以文件的形式提供出去;

I/O管理:对输入/输出设备进行统一管理

除此之外还有保证正常运行的健壮性管理以及防止非法入侵和入侵的安全性管理

什么是内核?

内核就是一个计算机程序,是操作系统的核心,提供了操作系统最核心的能力,可以控制操作系统中的所有内容

什么是用户态和内核态?

内核态:权限很高,可以控制及cpu、内存、硬盘等硬件,出于权限控制的考虑:将内存分为了内核空间和用户空间,使用什么空间就是什么态。

用户空间的代码只能访问一个局部的内存空间,但是内核空间的代码可以访问所有的内存空间

用户态和内核态是怎么切换的?

通过系统调用!比如:kafka的sendfile系统调用,发生系统调用后,会产生一个中断,此时会中断用户程序,转而执行内核程序,执行完成后,又发生中断,继续执行刚刚中断的用户程序。

中断和异常!硬件发生中断请求或者程序出现异常都会从用户态切换到到内核态,以处理这些事件。完成后切换到之前的状态。

任务或线程切换!进程或者线程的切换,涉及到从一个用户态切换到内核态再切换到另一个用户态。

什么是进程的上下文切换?

对于一个核,某一时刻只能执行一条CPU指令,上下文切换就是将CPU资源从一个进程分配给另一个进程的一种机制。切换的时候需要保留当前进程的状态(内存空间的指针,程序计数器,寄存器值等,见下面的进程表PCB),再读入下一个进程。

进程有哪些状态?

当然还有新建状态和结束状态

什么是僵尸进程?

僵尸线程是指已经完成,且处于终止状态,但在进程表中仍然存在的进程。

一般在有父子关系的进程中,子进程的进程标识符(PID)在子进程退出的时候不会释放,只有当父进程通过wait()或者waitpid()获取了子进程信息后才会释放。如果子进程退出,但是并没有上面操作,就会成为僵尸线程。

危害:占用PID、浪费系统资源(虽然不消耗CPU,但是会影响性能)、系统稳定性

解决:等待父进程结束,僵尸进程就会交给init接管清理。

           确保通过调用wait和waitpid系统调用来回收

进程表?

内核维护的一个数据结构,用于跟踪系统中所有进程的信息和状态。每个正在运行或者处于就绪态的进程在进程表中都有一个条目,这个条目通常被叫做进程控制块(PCB)

包含:进程标识符(PID唯一)、进程状态、程序计数器(下一条指令的地址)、CPU寄存器(当前进程的所有寄存器值,上下文切换的时候用到)、CPU调度信息(进程优先级和其它参数)、内存管理信息(进程地址空间的指针等)、IO状态等等。

孤儿进程?

父进程退出后,子进程还在运行,那么这些就是孤儿进程。孤儿进程会被init进程(PID)为1所收养,由init进程对他们完成状态收集工作。孤儿进程会被收养,所以没有危害

解决:init会清理的

进程调度算法?

确定在某一时刻CPU运行哪一个进程。

先来先服务:

非抢占式的调度算法,按照请求顺序,类似于队列。

优点:对于长作业比较有利,可以一直执行。

缺点:短作业可能因为长作业执行不了,同时在I/O密集型的进程也不利,每次I/O之后又得排队,对于I/O密集型进程,用户通常期待快速的响应,因为这些进程的特点是频繁的I/O操作和相对较少的计算。如果前面有CPU密集会响应很慢!这里的缺点同样适用于最短剩余时间

短作业优先:

非抢占式,按估计运行时间,类似于是个小根堆。

优点:解决了短作业的问题

缺点:长作业饥饿

优先级调度:

每个进程都有一个优先级(也是在PCB中),为了防止优先级低的进程没有调度,随着时间的推移会升高优先级。

缺点:比较难设置优先级。

时间片轮换:

按照先来先服务形成一个队列,每个进程运行一个时间片,用完后中断切换下一个进程。

缺点:和时间片大小有很大的关系,小会频繁切换进程,大就会导致响应较差;

最短剩余时间优先:

按照剩余时间调度,小根堆吧

缺点:抢占式,需要监视所有就绪状态的进程,对于交互性强的,不太友好,长作业也会饥饿。

进程间的通信方式有哪些?

IPC

管道

  • 无名管道:主要用在父进程和子进程之间的通信,单向通道;
  • 有名管道:具有文件系统中的路径名,因此可以在不相关的进程之间通信,也是单向的。知道这个管道的进程都可以打开这个管道来读写数据。
  • 用法及特点:
    • pipe()无名,mkfifo()有名,管道创建就可以通过读写文件的形式通信
    • 按照字节流传输,数据只能单向流动,要双向通信需要两个管道,遵循先进先出原则。
    • 缺点:效率低,不适合频繁的交换数据。

信号:

  • 用于通知进程某个事件发生了。异步执行。
  • 例如: kill -9 1050就表示给PID1050的进程发SIGKILL信号。
  • 常见信号:
    • SIGHUB:退出终端的时候,当前终端启动的所有进程都会收到这个信号,终止进程。
    • SIGINT:ctrl+c,程序终止信号。
    • SIGKILL:强制杀死
    • SIFTERM:遇上一个相比通常是程序自己退出。
  • 缺点:不可靠,会丢失,有安全问题和跨平台兼容问题,信息量有限。

消息队列:

  • 保留在内核的消息链表,按照消息的类型进行传递,具有较高的可靠性和稳定性。
  • 消息体有最大长度限制,不适合大的数据传输,存在用户态和内核态之间的数据拷贝开销

共享内存:

  • 共享一个给定的内存区,一个读一个写。
  • 最快的进程间的通信方式,针对其他运行效率低而专门设计的。
  • 缺点:有数据错乱、安全的问题

信号量:

  • 本质是一个计数器,参考redis信号量,JUC信号量,限制对共享资源的访问数量。
  • P减,V加,有阻塞进行唤醒。
  • 缺点:死锁风险,高竞争情况下会增大开销。

Socket:

  • 与JAVA中的Socket很相似,提供网络通信的断点,让不同机器上的进程之间双向通信。
  • 与JAVA中socket的区别和联系
    • 区别:
      • 操作系统:更接近硬件和网络协议栈,由操作系统提供的API,由操作系统实现。
      • JAVA:对底层API的高级封装。
    • 联系:
      • 都是支持网络通信的端点。
      • 都支持TCP/IP和UDP,并提供面向连接和无连接的通信模式。

进程和线程之间的区别?线程上下文切换?

见并发编程复习并发编程复习-CSDN博客

线程有哪些实现方式?

  • 内核态线程实现:由内核直接管理线程,一个用户线程就是一个内核线程。
  • 用户态线程的实现:在用户空间实现线程,不需要内核的参与,内核对线程无感知。
  • 混合线程:将两种结合起来用,用户态的执行系统内部线程在非阻塞时的切换,内核态的操作系统负责阻塞线程的切换。同时实现内核态和用户态线程管理。内核态一个线程服务多个用户态线程。
  • JVM通常采用内核态线程模型,直接映射。

线程同步?

把对共享资源访问的代码定义为临界区,代码之间需要是互斥的,保证原子性,即当前线程的操作不能被其他线程而影响。所以有:

  • 锁:分为忙等待锁无忙等待锁,前面CAS类似,后面阻塞等待;
  • 信号量:PV

死锁?

死锁出现的条件:

  • 互斥条件:当有一个线程获得了该资源,那么其他资源访问就得排队。
  • 请求并持有条件:当前线程已经获得了一个资源,但是还要请求另外一个被其他线程持有的资源。
  • 不可剥夺条件:当前资源在使用完之前不能被抢占。
  • 环路等待条件:A要B持有的资源,B也要A持有的资源

避免死锁:

  • 请求并持有条件:一次性申请晚所有的资源;
  • 不可剥夺条件:申请不到就释放自己的资源;
  • 环路等待条件:资源申请按照顺序申请,当请求了级别低的资源后面就只能申请级别低的资源。

活锁和饥饿锁?

  • 饥饿锁:一个线程一直拿不到自己要的资源。
  • 活锁:两个线程并未停止执行,都在重复的想去拿锁,但是另一个也来拿锁,自己退一步,另一个也退一步,一直反复消耗资源。

什么是虚拟内存?

虚拟内存是操作系统提供的一种内存管理技术,实际就是将不同进程的虚拟地址映射到不同的物理地址。虚拟内存通过将物理内存和磁盘上的一部分空间组合成一个地址空间,为每个进程提供了一个统一的虚拟地址空间。虚拟内存允许操作系统将进程的部分数据和指令存储在物理内存中,而将其余部分存储在磁盘上的页面文件(page file)中。

物理内存是CPU直接访问的存储设备RAM,存储了当前正在运行的程序的指令和数据,以及操作系统和其他正在运行的程序所需的数据。

所以:程序里面使用的是虚拟地址内存,实际在硬件的叫物理内存地址

什么是内存分段?

程序是由不同的逻辑分段组成的,包括:代码分段、数据分段、栈段、堆段组成。不同段不同属性,所以分段。哪一段是干嘛的?根据用户需要划分。

分段机制下的虚拟地址由:段号和段内偏移量组成。

虚拟地址、物理地址主要通过段表映射。

什么是内存分页?

分页是把整个虚拟和物理内存空间拆分为一段段4KB的大小。

访问分页系统中的内存数据,需要虚拟地址找到页表再找到物理地址去访问数据。

多级页表?

操作系统可能会有很多的进程,简单分页的话,页表会很庞大!利用了局部性原理

所以引入了多级页表,比如:

优势:

  • 多级页表减少内存占用的关键在于它并不需要为整个虚拟地址空间的每个页面都分配页表条目。
  • 在单级页表中,无论虚拟页面是否被使用,都要分配一个条目,占据很大的内存空间。
  • 在多级页表中,仅仅是创建出一级,当实际被使用才会将二级页表创建出来。

什么是块表?

同样利用了局部性原理。即在某一段时间内,整个执行程序仅限于执行程序中的某一部分,相应的,所访问的存储空间也局限于某个内存区域。

利用这一特性:把最常访问的几个页表存储到访问速度更快的硬件。在CPU中就加了一个最常访问的页表项Cache,TLB,又叫页表缓存。

分页和分段有什么区别?

  • 段是信息的逻辑单位,根据用户的需要划分的,对用户是可见的。页是信息的物理单位,是为了管理主存而划分的,对用户透明。
  • 段大小不固定,页大小固定
  • 段向用户提供二维空间地址,页向用户提供一维空间地址(前面段号和偏移量,后面是页号)

什么是交换空间?

操作系统把物理内存分为RAM分为一块一块的小内存,每一块内存被称为页。当内存不足的时候就会将某些页的资源迁移至磁盘上的一块空间上,以释放内存空间。磁盘上的空间就叫做交换空间,这一过程被称为交换。物理内存和交换空间的总容量就是虚拟内存的总容量。

用途:

物理内存不足时,一些不常用的会被交换出去。

系统启动时很多内存页用来初始化,之后不需要也可以交换出去。

页面置换算法?

在分页系统里,一个虚拟的页面可能在主存里,也可能在磁盘中,如果CPU发现虚拟地址对应的物理页不在主存里,就会产生一个缺页中断,将磁盘里的页调入主存之中。如果内存不够,就会置换一个。

常见算法?

  • 最佳页面置换算法:一种理想的算法,置换未来最长时间不访问的页面。所以需要计算每个页面的下一次访问时间,但是无法实现,根据未来推测
  • 先进先出置换法(有点像线程那里了):选择驻留时间很长的页进行置换。
  • 最近最久未使用的置换算法(LRU):选择最长时间没有被访问的页面进行置换。根据过去决定!但是要维护一个链表
  • 时钟页面置换算法是最近最少使用(LRU,Least Recently Used)算法的一种近似实现,旨在以较低的成本维持高效的页面置换。所有页面形成一个循环链表,并将指针设置在任意位置,页面访问过就设为1,然后遍历,遇到1的就更新为0,然后下一个直到找到为0的进行置换。
  • 最不常用置换算法(LFU):每个页面加一个访问计数器,最小的淘汰。

MMU?

MMU(内存管理单元,Memory Management Unit)是计算机硬件的一个重要组成部分,负责处理CPU和物理内存之间的虚拟地址到物理地址的转换。

软链接和硬链接有什么区别?

  • 硬链接:在目录下面创建一个条目(意味着它们实际上是文件系统中同一个文件的不同名字),记录着文件名和inode编号,这个inode就是源文件的inode(索引节点,存储文件或者目录的元数据,但不包含文件名和文件数据内容)。删除任意一个条目,文件还是存在,只要引用数量不为0,但是硬链接有限制,不能跨越文件系统,也不能对目录进行链接
  • 软链接:相当于重新创建了一个文件,这个文件有独立的inode,但是这个文件的内容是另外一个文件的路径(可以看作是一种快捷方式),所以在访问软链接的时候,实际上是访问另一个文件,所以软链接是可以跨越文件系统的,即使指向文件被删除了,链接文件还是在的。

硬中断软中断?

硬中断:由硬件设备产生的中断信号。输入输出接收到用户的操作,网络接口接收到的数据包,快速响应。

软中断软件中断或者内核中断,通常用于处理哪些不需要立即执行的任务,网络数据包的后续处理或者调度管理任务。软中断还用在从硬中断程序中分离出来的工作,以减少硬中断处理时间,从而快速响应。

DMA拷贝?

在主板上面安装了一块独立的芯片,硬件设备能直接访问内存,在内核与IO设备进行数据传输的时候,不需要CPU来控制数据的传输,直接通过DMA Controller控制数据的传输

//todo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值