我就像一个进程,每天都在不停地运行,但是有时候也会卡住,就像是死机一样。不过别担心,我会用尽全力来完成我的任务,就像是一个勤奋的程序员一样,只是有时候会需要一点点调试和重启。不过无论如何,我都会努力保持稳定运行,就像是一个顽强的进程!
一. 进程的概念
进程是程序的一次动态执行过程,包括创建、调度、消亡
2. 进程和程序的区别
程序(a.out)是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念
进程(./a.out)是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡
3. 进程是程序执行和资源(内存)管理的最小单位
4. 进程运行状态
(1)运行态:此时进程或者正在运行,或者准备运行。
(2)等待态:此时进程在等待一个事件的发生或某种系统资源。
可中断
不可中断
(3)停止态:此时进程被中止。
(4)僵死态:这是一个已终止的进程,但还在进程向量数组中占有一个task_struct结构体。
为了更好的管理Linux所访问的资源,系统在内核头文件include/linux/sched.h定义了进程控制块(PCB结构体task_struct)来管理每个进程的资源
内核空间进程资源即PCB相关的信息,包括进程控制块本身,打开的文件表项、当前目录、当前终端信息、线程基本信息、可以访问内存地址空间、PID、PPID、UID、EUID等,也就是说,内核通过PCB结构体可以访问到进程的所有资源信息。
(5)死亡
5. 进程的模式
用户模式和内核模式
nice 按用户指定的优先级运行进程
renice 改变正在运行进程的优先级
6. 进程相关的的系统调用
(1)fork
(2) getpid、getppid
(3) 进程退出
exit 刷新缓存区
_exit 不会刷新缓存区
return(主函数的return)
(4)wait、waitpid
(5)守护进程
(1)创建子进程,父进程退出
(2)在子进程中创建新会话
(3)改变当前目录为根目录
(4)重设文件权限掩码
(5)关闭文件描述符
二.通信的相关概念
(1) 通信的模式
单工:A-->B (键盘输入)
半双工:A--->B 或者 B--->A (对讲机)
双工:A--->B 同时 B-->A(打电话)
同步:(走路)
异步:(外卖)
(2 )通信方式
常用的进程间通信方式
1.传统的进程间通信方式 :无名管道(pipe)、有名管道(fifo)和信号(signal)
2.System VIPC对象 :消息队列(message共享内存(share memory)、queue)和信号灯(semaphore)
BSD
3.套接字(socket)
(3)无名管道
1.只能用于具有亲缘关系的进程之间的通信
2.半双工的通信模式,具有固定的读端和写端.
3.管道可以看成是种特殊的文件对.
(4)有名管道
1.有名管道可以使互不相关的两个进程互相通信有名管道可以通过路径名来指出,并且在文件系统中可见.
2.有名管道,进程通过文件IO来操作
3.有名管道遵循先进先出规则
4.不支持如lseek0操作
(5)信号
信号是在软件层次上对中断机制的一种模拟,是和异步通信方式.
(6)共享内存
共享内存是一种最为高效的进程闻通信方式程可以直接读写内存,而不需要任何数据的拷贝
为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间