分类 操作系统 下的文章

bjmayor发布于2022-02-10

操作系统换之并发这点事儿

[TOC]

并发

桌子上有很多桃子,每个人看到桃子去抓取。这就是并发,他存在的问题是 不同的人会尝试去抓同一个桃子。这么导致后面的人抓不到。

可能的解决办法是大家排队一次拿桃子,这样又会降低效率。

如何又快又不出错的拿桃子,这就是问题所在。实际上,并发比这个更复杂。

线程

进程只有一个指令执行路径,也就是只有一个pc计数器。

线程的引入 增加了指令执行路径。每个线程有自己的指令执行路径,即PC计数器,也有自己独立的寄存器。

但是这些线程又共享地址空间,从而共享代码和数据。

类似于进程间的切换有上下文切换,线程间切换也有上下文切换。

进程是把状态保存到进程控制块 (Process Control Block, PCB)。

线程是把状态保存到线程控制块(Thread Control Block, TCB)。需要注意的是,同一个进程的线程间 本身是共享地址空间的,所以不需要切换当前使用的页表。

因为每个线程都有独立的栈,多线程的引入还影响了地址空间布局。有的应用程序会利用这个特性,譬如Java有ThtreadLocal, 在线程栈里存变量。

线程和进程一样,并不是创建了就马上运行,而是会由操作系统调度。

阅读全文»

bjmayor发布于2022-01-24

操作系统之内存这点事儿

[TOC]

内存介绍

虚拟化内存

设计目标

目标:

  1. 透明, 这里指运行的程序感知不到内存被虚拟化的事实,相反,程序的行为就好像它拥有自己的私有物理内存。
  2. 效率 这里依赖硬件。譬如TLB, 主要消耗是虚拟地址转为实际物理地址。
  3. 保护 即程序不能访问它的地址空间之外的任何内容。从而也实现了隔离。

阅读全文»

bjmayor发布于2021-12-10

调度: 多级反馈队列

多级反馈队列

Multi-level Feedback Queue = MLFQ

如名字所示,解决思路就是将任务分级。

分成多个队列,每个队列的优先级不同,调度程序永远先运行完高优先级中的任务,再运行低优先级队列中的任务。

同一队列有多个任务时,轮转运行。

一个任务只能存在于一个队列中。

MLFQ调度策略的关键在于如何设置优先级。

阅读全文»

bjmayor发布于2021-12-09

基本调度策略

调度

调度策略

先做基本假设

  1. 每个工作运行相同的时间。
  2. 所有的工作同时到达。
  3. 一旦开始,每个工作保持运行直到完成。
  4. 所有的工作只是用CPU(无I/O操作)
  5. 每个工作的运行时间是已知的。

定义衡量指标。

  1. 周转时间。 = -
  2. 响应时间。 = -

这2个指标其实是互相矛盾的,不同同时最优。

阅读全文»

bjmayor发布于2021-12-08

cpu如何维护自己控制权的

cpu如何维护自己控制权的

[TOC]

关键概念

用户模式:受限的指令。

内核模式:所有指令

有些操作需要用到特权指令,这个只有在内核模式下才可以运行。

操作系统重获控制权有3种方式:

  1. 进程进行系统调用
  2. 进程出错,如访问了非法内存等。
  3. 时钟中断。

其中时钟中断很重要,是硬件支持。如果没有时钟中断,然后进程又不进行系统调用,也不出错(譬如:啥也不干的无限循环),这样操作系统无法获得控制权。

阅读全文»

bjmayor发布于2021-10-26

哲学家就餐问题

哲学家就餐问题

哲学家就餐问题是一个经典的同步问题,它是大量并发控制问题的一个例子。这个代表型的例子满足:在多个进程之间分配多个资源,而且不会出现死锁和饥饿。

本文内容主要是摘自《操作系统精髓与设计原理》

阅读全文»