linux系统编程笔记

进程:起始于执行中的目标码,源于ELF中的可运行代码。由数据,资源,状态以及虚拟的计算机组成。

1.ELF中有多个数据段,比较常用的有text,data以及bbs段。这些段是会被加载进内存的线性块。

2.进程会设计由内核仲裁和管理的各种系统资源,通常进程只会通过系统调用来请求和操纵资源。(定时器,硬件等)

3.进程是计算机虚拟出来的对象。每个进程会被分配单一的线性地址空间。通过虚拟内存和页面调度机制可以支持多进程在系统中。

线程:每个进程由一个或多个线程所构成。线程是进程中的最小执行单位,负责执行代码以及维护进程的状态。

1.线程由stack,处理器的状态以及目标码中的当前位置组成。

2.多个线程共享一个进程的资源。

进程的层次结构->僵尸进程

linux系统编程笔记

linux系统编程笔记

进程->用户与组

每个进程的标识符PID都会对应一个UID(用户标识符),用来识别与当前进程关联的用户,称为进程的真实用户标识符。

linux系统编程笔记

信号

信号是一种单向异步通信机制。支持进程间通信。

典型应用:分段错误->segmentaition fault  终端按下Ctrl+C

 

进程间通信:

linux内核采用的IPC机制:管道,命名管道,信号量,消息,共享内存以及快速用户空间互斥体。

 

空闲进程:没有其他可执行的进程内核会运行此进程,具有pid0。

取得进程以及父进程ID:getpid()和getppid();

运行一个新进程:

linux系统编程笔记

 

exec系列调用:

execl(): 将当前进程的映像替换成新的映像。

fork系统调用:创建一个新的进程来运行当前相同的映像。

linux系统编程笔记

 

fork +exec:

linux系统编程笔记

 

COW :copy on write (写入时才复制)

延迟优化策略:访问时获得资源的指针,写入时或者资源的副本。

 

终止一个进程:

exit(),SIGTERM,SIGKILL,内核杀掉,atexit()

等待已终止的子进程->僵尸进程

子进程的死亡时间先于父进程,会进入一个特殊的状态,保留一部分小的骨架,包含部分有用的数据,等待父进程来打听消息后才正式结束,若父进程一直没有打听,则变为僵尸进程。

 

启动并等待一个新进程:(同步进程的创建)->system

僵尸进程:见上

 

linux的调度策略与优先级:FIFO,轮转,普通,批处理调度,设定linux的调度策略

 

未完待续:

 

参考《linux系统编程》