操作系统的任务调度机制(四)通信、同步和死锁

2月 21, 2021
操作系统, 并发编程, 面试题

操作系统进程间通信、以及并发的处理方式,是调度器能够高效运行的基础,上篇说了调度器的策略,本篇继续深入调度器的背后,看看进程间通信、同步和并发控制如何支撑着这套现代操作系统的调度机制。内容上是按照进程间通信引出了并发控制方法:同步原语,并发又进而引出了死锁问题。 进程间通信(IPC)# 进程间通信(Inter-Process Communication,IPC)是多进程协作的基础,进程间通信的很多 …

操作系统的任务调度机制(三)调度器策略

2月 14, 2021
操作系统

操作系统中的调度器有任务调度、I/O 调度(以后再说)、内存调度(之前提到的换页策略)等多种类型,本文主要关注任务调度。在单核多进程并发的环境里,进程之间并不是“并行”执行的,实际上在任何时刻都只有一个进程处于执行状态,背后是 CPU 在不停地进行上下文切换,让你看起来像是多个任务在并行执行。而任务调度器要做的就是决定选择哪个进程执行,什么时候执行,执行多久,下面开始详细介绍。 调度 …

操作系统的任务调度机制(二)进程和线程模型

2月 10, 2021
操作系统

进程模型# 进程的概念是随着多道批处理系统的概念产生的,MULTICS 之前还叫 Job,后来它为了区别这个 IBM 公司发明的术语改为了 Process,进程不是程序,程序是放入内存的一段数据,而进程是带有状态的一种活动、一系列动作,它保存了程序运行时的一系列状态。如果一个程序运行两遍,那就算作是两个进程,只不过可能只有一个副本被考入内存。 进程作为拥有资源分配的最小单位,是一个正在执行程序的实 …

操作系统的任务调度机制(一)演进历史

2月 5, 2021
操作系统, 历史

之前说到了 Goroutine 的运行时调度机制,引发了我对操作系统调度的进一步回忆,发现已经非常模糊,只能从头再来。在很多大型系统中,包括编程语言,都有调度器的概念,其核心的作用都是对有限的处理器资源进行最大化利用。具体到我目前关注的,也就是操作系统中关于进程和线程的调度策略以及并发处理机制。 操作系统的任务调度机制(一)演进历史 操作系统的任务调度机制(二)进程和线程模型 操作系统的任务调度机 …

操作系统的内存管理机制 R

2月 1, 2021
Recommended, 内存管理, 操作系统

继续复习操作系统,话说随着 CPU 计算资源的性能开始过剩,压在内存身上的担子越来越重了,堪称新时期的性能瓶颈,对操作系统来说,内存管理机制也要进行近乎极致的优化才可以充分发挥 CPU 的正常水平。 操作系统对内存管理的需求# 物理内存# 当前 1T 容量的机械硬盘价格大约是 200 元,而 200 元只能买一个容量为 8G 的内存条。一直以来差不多都是这样的差距,内存的价格永远比硬盘贵,内存的读 …

使用 DOSBox 和 Debug 命令调试汇编程序

1月 24, 2021
Tools, 操作系统, Compiler

正在看王爽的《汇编语言》,因为我在 Mac M1 环境,按书上做汇编实验的话,搜索了一圈发现 DOSBox 应该可以满足我的需要,它是一个跨平台的可以运行 MS-DOS 的模拟器。 DOSBox# 下载地址 https://www.dosbox.com/ 这个模拟器应该是被一些老玩家拿来玩上世纪 80 年代的 DOS 游戏了,就像美剧少年谢尔顿里面那样的。 Debug# …

汇编语言不会编?

1月 21, 2021
操作系统, Compiler

上篇已经介绍了 CPU 的寄存器种类,知道了程序是由指令和数据组成的,以及 CPU 是如何通过寄存器运行程序的,那么现在可以真正了解下汇编指令集了。 前提须知# 因为不同 CPU 架构的指令集都不尽相同,汇编语言通常不具有可移植性,这里介绍的还是以 16 位的 8086CPU 为主。 下面的描述,用 () 表示一个寄存器或内存单元中的内容,比如(ax)表示 ax 中的内容,(20000H) …

CPU 与寄存器

1月 2, 2021
操作系统, Compiler

看 Go 语言的调度器相关内容的时候里面很多内存堆栈、寄存器的概念,一开始没怎么看懂,需要先回来复习下相关的基础知识,早知道大学就好好学了。 前提须知# 下面的内容都以 16 位的 8086CPU 的情况为准。 通常写一条汇编指令或一个寄存器的名称,不区分大小写。 为了区分不同的进制,在十六进制表示的数据的后面加 H,在二进制表示的数据后面加 B。 现在很多实际的源码中一般都是 32 位或者 64 …

Go 语言的 MPG 并发调度模型

12月 21, 2020
源码分析, 系统设计, 数据结构, Golang, 并发编程, 面试题

Golang 的高并发能力是通过协程 goroutine 实现的,在 Go 语言的开发中,每涉及到 goroutine 的相关功能实现时,都会意识到自己需要对 MPG 的模型有一个大概的了解,在此基础上才能做好开发上的决策,本篇也即为 MPG 并发调度模型的学习笔记了。 进程、线程和协程# 要对 goroutine 的调度器深入了解,需要先了解一下进程、线程的基础知识。 进程# 进程作为拥有资源分 …

Go 语言的 Context 源码分析

11月 24, 2020
源码分析, Golang

研究 Context 的源码,有助于对结合运用 interface 和 struct 的理解,以及对其他三方框架对 Context 接口的重新实现也能有一定认识,在实际开发中更是非常有帮助。Context 的源码非常短小,加上大概一半的注释整个文件也才 500 行,500 行就可以和面试官扯一个小时,ROI 巨大,确定不研究下么。 必备知识# WithTimeout 使用# func main() …


© 2012 - 2025 YINDONGLIANG