校招必备的操作系统知识(二)

1 什么是虚拟内存

 虚拟内存是用于当做内存来弥补计算机RAM空间缺乏的硬盘空间。当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了。当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。这个过程对应用是隐藏的,应用把虚拟内存和实际内存看作是一样的.

2.IO

 IO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<-->内核空间、内核空间<-->设备空间(磁盘、网络等)IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。

 

阻塞IO调用 :在用户进程(线程)中调用执行的时候,进程会等待该IO操作,而使得其他操作无法执行。

非阻塞IO调用:在用户进程中调用执行的时候,无论成功与否,该IO操作会立即返回,之后进程可以进行其他操作(当然如果是读取到数据,一般就接着进行数据处理)。

 

 

 

同步IO用户进程发出IO调用,去获取IO设备数据,双方的数据要经过内核缓冲区同步,完全准备好后,再复制返回到用户进程。而复制返回到用户进程会导致请求进程阻塞,直到I/O操作完成。

异步IO用户进程发出IO调用,去获取IO设备数据,并不需要同步,内核直接复制到进程,整个过程不导致请求进程阻塞。

3.父子进程关心

1)父进程先于子进程终止
当父进程先退出时,系统会让init进程接管子进程,该子线程成为了孤儿进程。
2)子进程先于父进程终止
分为2种情况:
a)正常情况:父进程调用了wait函数 ( waitpid函数),此时父进程会等待子进程结束。
 b)父进程又没有调用wait函数 ( waitpid函数),此种情况子进程进入僵死状态即僵尸进程,并且会一直保持下去直到系统重启。子进程处于僵死状态时,内核只保存进程的一些必要信息以备父进程所需。此时子进程始终占有着资源,同时也减少了系统可以创建的最大进程数。

僵死状态:一个已经终止、但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息,释放它仍占有的资源)的进程被称为僵死进程(zombie)。ps命令将僵死进程的状态打印为Z 。

wait函数:进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

 

 

4. 读写锁讲一下,说一下应用场景

互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。

 

读写锁:rwlock,区分读和写,处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁

 

注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写优先于读,

信号量是用于线程间同步的,而互斥锁是用于线程的互斥的

 

应用场景:

以队列操作为例:

线程A对队列负责将数据写入队列。须采取“互斥锁”或“读写锁的写锁”

线程B队列负责从队列读出数据。须采取“互斥锁”或“读写锁的写锁”,读队列操作,不可采取“读写锁的读锁”,因为从队列读出数据时,需要更改队列本身的下标索引,如果多个线程同时操作该队列的话,就会导致队列下标索引混乱。

但是对队列的查询操作则最好采取“读写锁的读锁”来提高效率。

 

 

 

你可能感兴趣的:(算法和计算机基础模块)