深刻理解计算机系统(二)

进程


进程是计算机科学中最成功,最深入的概念之一。并发

在咱们运行一个程序时,一般会有这样一个假象,就好像咱们的程序是当前惟一运行的程序同样,它是独占 CPU 和内存的,程序的指令在处理器上一条一条地执行,最后,咱们的程序就好像内存中惟一一个对象,这些假象都是进程的概念给咱们提供的。函数

  • 一个独立的逻辑控制流,它提供一种假象,就好像咱们的程序独立地使用处理器。
  • 一个独立的私有地址空间,它提供一种假象,好像咱们的程序独立地使用内存系统

逻辑控制流 操作系统

处理器的一个物理控制流被分为三个逻辑流,每一个进程一个。每一个竖直的条表示逻辑流的一部分。三个逻辑流的执行是交错的。关键在于进程是轮流使用处理器的,每一个进程执行它的流的一部分,而后被抢占 [暂时挂起] 。unix


并发

一个逻辑流在执行的时间上与另外一个发生重叠,就称为并发流。多个流并发的执行称为并发。一个进程和多个进程轮流地运行称为多任务。一个进程执行它的部分逻辑流的每一时间段称为时间片cdn


私有地址空间

进程为每一个程序提供一个假象,好像它单独地占用系统地址空间。进程为每一个程序提供它本身私有的地址空间。 每一个地址空间的底部是保留给用户的,一般包括栈,堆,数据和代码。地址空间的顶部是保留给内核的。对象


内核模式和用户模式

一个运行在内核模式的进程能够执行指令中的任何指令,访问系统中的任何内存空间。没有设置模式时,进程就处在用户模式,此时的进程不容许执行带有特权的指令,如中止处理器,发起一个 I/O 操做等。也不容许访问内核区的代码和数据。blog


上下文切换

操做系统的内核使用一种上下文切换的形式的控制流来实现多任务。内核会为每个进程维持一个上下文,上下文就是内核从新启动一个被强占的进程说须要的状态。在进程执行的某些时刻,内核能够决定抢占当前进程,并从新开启一个先前被抢占了的进程,这种行为叫作调度,这个时候就会发生上下文切换。若是系统由于某个调用而发生阻塞,那么内核可让这个进程休眠,切换到另外一个进程。好比,一个 read 系统调用访问磁盘,内核能够选择上下文切换,运行另外一个进程,而不是等待数据从磁盘到达。进程


建立和终止进程

进程通常有三种状态内存

  • 运行。要么在 CPU 上运行,要么被等待执行且最终会被内核调度。
  • 中止。进程的执行被挂起,且不会被调度。当收到某种信号时,才会被从新调度,而后再次运行。
  • 终止。进程永远的中止了,通常进程中止有三个缘由
  1. 收到一个信号,该信号终止进程
  2. 从主程序中返回
  3. 调用 exit 函数

在 unix 系统中,建立一个子进程是 fork 函数。新建立的子进程与父进程几乎但不彻底相同,子进程能够获得与父进程用户虚拟地址空间相同的一份副本(独立地),包括代码、数据、栈和堆。子进程还能读写父进程打开的文件,他们之间最大的区别就是有不一样的 PID。it

parent 0

child 2

  • 相同可是独立的地址空间 父进程和子进程的地址空间都是相同的,他们的用户栈、堆、全局变量、代码都是同样的。因此,在第 6 行fork函数返回时,x在两个进程的值都是 1。然而,他们却都有独立的地址空间。后面,父进程与子进程对 x 的操做也都是独立的,这就是后面两个 x 的值不一样。
相关文章
相关标签/搜索