进程

该文会不断地补充。

 

进程


 

进程的经典定义:一个执行中的程序的实例。

  1. 独立的逻辑控制流

  2. 私有的地址空间

系统中的每个程序都是运行在某个进程的上下文中的。上下文是由程序正确运行所需的状态组成的。这个状态包括存放在存储器中的程序的代码和数据,它的栈、通用目的存储器的内容、程序计数器、环境变量以及打开文件描述符的集合。

 

 

逻辑控制流


假象:每个程序好像独占地使用处理器

  1. 程序计数器:pc(对应这包含在程序的可执行目标文件中的指令;包含在运行时动态链接到程序的共享对象中的指令)

  2. pc值的序列:逻辑流

 

抢占 preempted

cpu周期性地停顿(问一问自己为什么?)

并发流(concurrent flow)

多任务(multitasking) 

一个进程和其他进程轮流运行的概念称为多任务。

时间片(time slice)

并行流(parallel flow)

然而,有时我们会发现确认并行流是很有帮助的,它是并发流的一个真子集。如果两个流并发地运行在不同的处理器核活着计算机上,那么我们称它们为并行流,它们并行地运行,且并行地执行。

 

私有空间地址


 

进程为程序提供一种假象,好像它独占地使用系统地址空间。

在一台有n位地址的机器上,地址空间是2^n个可能地址的集合,0, 1, ... ... , 2^-1。

 

用户模式和内核模式


 

  1. 限制一个应用可以执行的指令

  2. 限制一个应用可以访问的地址空间范围

 

控制寄存器的位模式(mode bit):进程享有的特权

超级用户模式、内核模式:可以执行指令集中的任何指令,可以访问系统中任何存储器的位置

特权指令 privileged instruction

致命的保护故障

系统调用接口:间接地访问内核代码和数据

进程从用户模式变为内核模式的唯一方法是通过诸如中断、故障或者陷入系统调用这样的异常。当异常发生时,控制传递到异常处理程序,处理器将模式从用户模式变为内核模式。处理程序运行在内核模式中,当它返回到应用程序代码时,处理器就把模式从内核模式变为用户模式。  

 

关于Linux的/proc文件系统或/sys文件系统有什么用?

 

上下文切换(context switch)


操作系统内核使用一种称为上下文切换的较高层形式的异常控制流来实现多任务。

内核为每个进程维持一个上下文(contenxt)。

上下文就是内核重新启动一个被抢占的进程所需的状态。它由一些对象的值组成,这些对象包括通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈和各种内核数据结构,比如描绘地址空间的页表、包含当前进程信息的进程表,以及包含进程已打开文件的信息的文件表

调度(schedule):内核可以决定抢占当前进程,并重新打开一个先前被抢占的进程。这种决定叫做调度。

调度器(scheduler):内核中的代码。

上下文切换的触发情况:

  1. 系统调用而阻塞

  2. 中断

 

所有的系统都有某正产生周期性定时器中断的机制,典型的为1毫秒或每10毫秒。每次发生定时器中断时,内核就能判断当前进程已经运行了足够长的时间了,并切换到一个新的进程。

针对阻塞,内核代表用户执行系统调用时,且因为系统调用因为等待某个事件发生阻塞,内核可以选择让当前进程休眠切换到另一个进程。比如read系统调用请求磁盘访问(数量级一般为几十毫秒),内核可以选择执行上下文切换,运行另外一个进程,而不是等待数据从磁盘到达。另外一个🌰是sleep系统调用,它显示地请求让调用进程休眠。

 

相关的概念:

信号以及信号机制(比如nginx里面针对不同系统的信号机制采用的不同配置。如real-time类)

僵尸进程

中断

以及其他的一些类unix相关的系统概念

 

posted on 2015-06-07 20:33  dotdog  阅读(303)  评论(0编辑  收藏  举报

导航