手搓OS-day4

今天才是真真的操作系统的部分,并发控制,今天要学习的是多线程编程库(没怎么看,少更)。

复习:进程与线程

进程:运行的一个程序以及其已经在计算机中的所拥有的资源的和(理解型说法,并不准确),进程是资源分配的基本单位。PCB用于标志进程的存在。此外关于进程还存在进程间通信问题,进程特性进程切换等问题。

就我个人理解为何要引入进程概念,是为了管理资源分配的问题,不只是空间资源还有计算资源,因为计算机的资源是紧俏的(当然也有机制限制),并不能满足所有的所有的程序同时运行(当然这里限制在单核处理器)。但是由于应用有要求,需要发展出能在人难以感知的情况下”同时“运行(并发),而进程恰好通过把资源与程序进行耦合(不知道用词好不好,类似一个搭积木的感觉)既保护了程序状态,又实现了程序运行的切换。

当人们线程用出来了甜头,想要进一步榨干计算机资源(bushi),然后就有了线程,线程就是榨干计算资源的(),但是线程并不是资源分配的单位。

多线程编程

貌似并不难

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "thread.h"

void Thello(int id) {
while (1) {
printf("%c", "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"[id]);
}
}

int main() {
for (int i = 0; i < 10; i++) {
create(Thello);
}
}

很好玩,使命令行爆炸。

image-20240112211838011

这下很有并发的魅力(不是),但是联系底层让人后背发凉,细一想貌似也没什么大不了的

“处理器一次执行一条指令” 的基本假设在今天的计算机系统上不再成立,虽然但是这是不难理解的,两条程序由于并发or并行很可能会出现共享区的变量出现问题

后面的故事,还是读参考链接吧,如果有操作系统基础的同学一定明白,进程同步互斥的问题都是从这里衍生出来的。

参考链接

5. 多处理器编程:从入门到放弃 (jyywiki.cn)