多任务编程:
1.多进程
2.多线程
进程:(进行中的程序)--正在运行的程序 (动态的) ---内存
程序的一次执行过程!进程是程序的一个实例;
程序 -- a.out (可执行程序) ---静态的
程序源代码
程序 加载 到内存 运行起来 成为了 进程。
进程是运行起来的程序,一个程序可产生多个进程
程序 ---> ./a.out ----> 进程
程序 à 静态 -> 硬盘
进程 -> 动态 -> 内存
为什么需要进程?
1.为了描述和管理程序运行的动态过程;
2.进程调度;
3.操作系统为了管理程序的动态运行的过程;
栈 堆 静态区 字符串常量区 代码段
进程的组成: 程序 =代码 + 数据;
进程概念:
描述 记录 程序运行过程中的 动态信息!
一个程序 可以 对应到多个进程
程序 变成 进程?
[栈 ]
[堆 ]
[静态区(全局区)] //data --已初始化的 全局变量 或 静态变量
//bss --未初始化的 全局变量 或 静态变量
[字符串常量区 ]
[代码区 ] //text (正文) --代码段
./a.out -----> 进程 (开辟的)
并发: 某一时刻,同时发生
正在执行的程序 ---进程 (动态)
程序 ----加载到内存去运行--- 进程
进程是 程序运行的实体。
程序中有啥:
程序 = 数据+代码
linux:
程序
bss --- 未初始化的数据 |
data --- 初始化了的数据 | 静态区 | ---数据
text --- 正文段(代码段)
程序
./a.out
进程: (占用 cpu ,内存相关的资源 ,IO资源(屏幕,键盘))
进程的一生:
创建进程
执行任务
(1).跟父进程相同的任务
(2).有自己的任务要做
进程结束
exit()
(1).孤儿进程 --- 没有父亲
(2).僵尸进程 --- 有父亲,但是自己先挂了
1.进程的含义?
进程是一个程序执行的过程,会去分配内存资源,cpu的调度
pcb 是一个结构体,Process Control Block
print circuit board
struct task_struct //
{
PID,进程标识符
PPID,parent id (父亲)
当前工作路径 chdir
umask 0002
进程打开的文件列表 文件IO中有提到
信号相关设置 处理异步io,
用户id,组id
进程资源的上限
ulimit -a,显示资源上限。
}
//一个程序运行之后(进程)
默认打开了三个文件
stdin
stdout
stderr
2.进程和程序的区别?
程序:静态
存储在硬盘中代码,数据的集合
进程:动态
程序执行的过程,包括进程的创建、调度、消亡
.c ----> a.out-----> process(pid)
1)程序是永存,进程是暂时的
2)进程有程序状态的变化,程序没有
3)进程可以并发,程序无并发
4)进程与进程会存在竞争计算机的资源
5)一个程序可以运行多次,变成多个进程
一个进程可以运行一个或多个程序内存的分布
0-3G,是进程的空间,
3G-4G是内核的空间,虚拟地址
虚拟地址 * 物理内存和虚拟内存的地址、
进程的编程:
创建进程:目的执行一个程序,主要是为了实现多任务;
进程的执行和运行;
进程结束;
进程结束后资源的回收—僵尸态;
进程的状态
linux 怎么管理进程?
PCB (process control block)//账本 信息登记表
程序角度:
task_struct {
PID, //进程标识符
PPID, //父进程ID号 parent
当前工作路径 //chdir
umask //0002
进程打开的文件列表 //文件IO中有提到
信号相关设置 //处理异步io, ---段错误
用户id,组id
进程资源的上限
}
户口信息: //父子关系
进程的执行
跟父进程相同的任务,也有自己的任务要做
孤儿进程,父进程不在,init收养子进程;此时子进程是一个后台进程;
子进程结束,父进程不做任何处理,子进程处于僵尸态。