[不建议阅读]决胜春招(九)——操作系统指北(我也没想到面试准备数据库结果考OS)

504 阅读3分钟

进程管理

进程是对运行程序的一种抽象。进程就是正在执行程序的实例。 操作系统负责管理所有正在运行的进程,操作系统会为每个进程分配特定的时间来占用 CPU,操作系统还会为每个进程分配特定的资源。

操作系统为了跟踪每个进程的活动状态,维护了一个进程表。在进程表的内部,列出了每个进程的状态以及每个进程使用的资源等。

由于IO和缓存的速度差别,通过进程的切换来在单CPU的情况下,实现一种伪并发

进程表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息 image.png

线程

为什么要有线程

  • 多线程之间会共享同一块地址空间和所有可用数据的能力,这是进程所不具备的
  • 线程要比进程更轻量级,由于线程更轻,所以它比进程更容易创建,也更容易撤销。在许多系统中,创建一个线程要比创建一个进程快 10 - 100 倍。【创建消耗低】
  • 第三个原因可能是性能方面的探讨,如果多个线程都是 CPU 密集型的,那么并不能获得性能上的增强,但是如果存在着大量的计算和大量的 I/O 处理,拥有多个线程能在这些活动中彼此重叠进行,从而会加快应用程序的执行速度

线程之间共享了什么

线程不像是进程那样具备较强的独立性。 同一个进程中的所有线程都会有完全一样的地址空间,这意味着它们也共享同样的全局变量。由于每个线程都可以访问进程地址空间内每个内存地址,因此一个线程可以读取、写入甚至擦除另一个线程的堆栈。 但并不意味着堆栈是放在一起或者一个的,每个线程的堆栈放在内存中,操作系统在切换线程的时候切换堆栈寄存器的值。 image.png

如何保证线程安全

  • 对非安全的代码加锁
  • 使用线程安全的类
  • 多线程并发情况下,线程共享的变量改为方法级的局部变量。

进程调度算法

先来先服务

短作业优先

高响应比优先调度

响应比Rp=等待时间+要求服务时间要求服务时间响应比R_p = \frac{等待时间 + 要求服务时间}{要求服务时间}

最短剩余时间

时间片轮转

优先级调度

多级反馈队列

进程间通信

管道pipe

半双工+数据单向流动+只能在父子进程间使用

命名管道FIFO

(无名管道:只存在于内存中的文件;命名管道:存在于实际的磁盘介质或者文件系统)

消息队列

消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正的删除。

消息队列克服了信号承载信息量少,管道只能承载无格式字节流(因此也可以按类型读取而不一定要先进先出)以及缓冲区大小受限等缺。

共享内存

信号量

信号量是一个计数器

socket

信号

用于通知接收进程某个事件已经发生;

内存管理

虚拟内存

为什么要有虚拟内存

虚拟内存是一种内存分配方案,是一项可以用来辅助内存分配的机制。应用程序是按页装载进内存中的。但并不是所有的页都会装载到内存中,计算机中的硬件和软件会将数据从 内存 临时传输到磁盘中来弥补内存的不足。

如果不使用虚拟内存,一旦内存全部占用,则不能运行程序。