linux进程基础

参考:Linux进程基础html

做者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!node

 

程序和进程算法

同一个程序能够执行屡次,每次均可以在内存中开辟独立的空间来装载,从而产生多个进程。不一样的进程还能够拥有各自独立的IO接口。shell

如何建立一个进程

实际上,当计算机开机的时候,内核(kernel)只创建了一个init进程。Linux内核并不提供直接创建新进程的系统调用。剩下的全部进程都是init进程经过fork机制创建的。新的进程要经过老的进程复制自身获得,这就是fork。fork是一个系统调用。进程存活于内存中。每一个进程都在内存中分配有属于本身的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。安全

老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。一个进程除了有一个PID以外,还会有一个PPID(parent PID)来存储的父进程PID。若是咱们循着PPID不断向上追溯的话,总会发现其源头是init进程。因此说,全部的进程也构成一个以init为根的树状结构。bash

以下,咱们查询当前shell下的进程:数据结构

 

root@vamei:~# ps -o pid,ppid,cmd
  PID  PPID CMD
16935  3101 sudo -i
16939 16935 -bash
23774 16939 ps -o pid,ppid,cmd

咱们能够看到,第二个进程bash是第一个进程sudo的子进程,而第三个进程ps是第二个进程的子进程。函数

fork一般做为一个函数被调用。这个函数会有两次返回将子进程的PID返回给父进程,0返回给子进程。实际上,子进程总能够查询本身的PPID来知道本身的父进程是谁,这样,一对父进程和子进程就能够随时查询对方。post

一般在调用fork函数以后,程序会设计一个if选择结构。当PID等于0时,说明该进程为子进程,那么让它执行某些指令,好比说使用exec库函数(library function)读取另外一个程序文件,并在当前的进程空间执行 (这其实是咱们使用fork的一大目的: 为某一程序建立进程);而当PID为一个正整数时,说明为父进程,则执行另一些指令。由此,就能够在子进程创建以后,让它执行与父进程不一样的功能。url

 

进程与线程(thread)

尽管在UNIX中,进程与线程是有联系但不一样的两个东西,但在Linux中,线程只是一种特殊的进程。多个线程之间能够共享内存空间和IO接口。因此,进程是Linux程序的惟一的实现方式。

 

总结

程序,进程,PID,内存空间

子进程,父进程,PPID,fork, wait

 

《Linux核心笔记》

#进程的调度

全部进程部分时间运行于用户模式,部分时间运行于系统模式。如何支持这些模式,底层硬件的实现各不相同,可是存在一种安全机制可使它们在用户模式和系统模式之间来回切换。

通常等待发生在系统调用过程当中,此时进程处于系统模式;处于等待状态的进程将被挂起而其余的进程被调度管理器选出来执行。

解决进程等待:时间片轮转策略

 可运行进程是一个只等待CPU资源的进程。Linux使用基于优先级的简单调度算法来选择下一个运行进程。当选定新进程后,系统必须将当前进程的状态,处理器中的寄存器以及上下文状态保存到task_struct结构中。同时它将从新设置新进程的状态并将系统控制权交给此进程。

#进程的文件、文件系统

描述一个进程的数据结构task_struct中,包含两个描叙系统中每一个进程所使用的文件系统相关信息。

第一个fs_struct包含了指向进程的VFS inode和其屏蔽码。这个屏蔽码值是建立新文件时所使用的缺省值,能够经过系统调用来改变。

第二个数据结构files_struct包含了进程当前所使用的全部文件的信息。这些文件有些多是真正的文件,有的则是输出/输入终端或者物理设备,但程序都将它们视为文件。

#虚拟内存

进程的虚拟内存包括可执行代码和多个资源数据。首先加载的是程序映象,例如ls。ls和全部可执行映象同样,是由可执行代码和数据组成的。

最后Linux进程调用通用库过程,好比文件处理子程序。若是每一个进程都有库过程的拷贝,那么共享就变得没有意义。而Linux可使多个进程同时使用共享库。来自共享库的代码和数据必须链接进入进程的虚拟地址空间以及共享此库的其它进程的虚拟地址空间。

 

#程序执行机制:见另外一篇blog

 

#IPC进程间通宵机制

1. 信号

2. 管道

3. Unix System V IPC机制:套接字、信号量、共享内存

相关文章
相关标签/搜索