跳转到内容
新建笔记

操作系统原理

进程是程序执行的基本单位。程序加载到内存执行,产生进程,一个程序可以产生多个进程。每个进程独立,认为自己占有全部内存空间。可以共享全局变量。

线程是并行的最小单位。每个进程有一个程序计数器,记录程序执行位置。一个执行流就是一个线程。需要多个线程,则会有多个程序计数器,彼此独立。每个线程有寄存器,堆栈等。线程间共享项:地址空间;全局变量;打开的文件等。

CPU在时间片内,轮询每个线程,就像RTOS中的任务状态一样(运行,阻塞,就绪)。系统为每个线程提供虚拟CPU,这样线程就不需要考虑时间片轮转问题。

进程共享全局变量,因进程竞争而产生问题的代码成为临界区,解决方法是互斥,进程A访问临界区,进程B必须等待,通过上锁解决,A访问时上锁,B不能访问,A走出临界区后,再解锁。但是这种方法也没解决,因为锁变量也是共享的。最终可以通过Peterson算法解决:

// 进入前
int other = 1 - process; // 另一个进程
interested[process] = True;
turn = process;
while(turn == process && interested[other] == True) // 这个是忙等待方法,更好地是使用系统调用
// 离开后
interested[process] = False;

进程1产生的数据放入共享缓冲区,进程2取出数据。这其中会产生进程1会一直产生数据放入共享缓冲区的问题。解决方法通过引入信号量机制(一个变量)进程执行时down信号量操作,使其为0,该进程结束后up信号量为1,这时进程2才可以读取共享缓冲区,但是也要遵循信号量机制。

CPU的调度程序调度进程,如果是进程中由多个线程,则内核管理的基本单位为线程。分4个优先级,4级最高。