单道程序设计:一个 CPU同一时刻只能运行一个程序,但是感觉是多个程序
——并发处理(宏观上多个,微观上实际是一个)
多道程序运行(分时系统)
——并行处理:真的是多个程序同时运行
硬件中断技术的出现,进而软件上有了分时系统,时间片轮转。
程序:为了执行特定任务的一系列指令的有序集合。
进程:
从用户角度看:进程是程序的一次动态执行过程
从操作系统来看:
1.进程是操作系统分配内存,CPU片等系统资源(系统中能打开的文件)的基本单位。
2.进程是资源操作的最小单位。
3.每个进程有独立的运行状态,有自己独立的地址空间(4G)
PCB:进程控制块
(在操作系统中,管理进程的属性集合——进程是程序的一次执行过程,需要保存进程的现场信息,这些信息需要一个数据结构来保存,在C语言中用结构体,我们将这个结构称为PCB)
PCB是一个操作系统感知一个进程存在的重要数据结构。
从操作系统角度来看:
程序=代码段+数据段
进程=代码段+数据段+堆栈+PCB
PCB{
pc 下一条指令的地址
esp 栈顶指针
ebp 基址
}
PCB记录了代码和数据的地址,将代码和数据有效的粘合
Linux 对应的PCB数据结构:task_struct
进程标识符
进程状态
进程空间
各种时间信息
进程间通信
内存使用情况
寄存器
进程和程序的区别:
1.进程是动态的(进程是短暂的)
2.程序是静态的(放在磁盘/光盘上的永久文件)
3.进程有PCB文件
4.一个程序可以进行多个程序
5.一个进程只能对应一个程序(例:一个工程只能对应一个main函数)
kill -l 显示所有进程
kill+进程——给这个进程发送一个信号
ps查看进程状态
ps aux | grep aplay
ps -ef
状态变迁:
三态
linux 七态
awk” {print $2 (提取第二列的信息)}` filename
进程标识符
操作系统会给每个进程分配一个独一无二的编号。
编号的范围 cat /proc/sys/kernel/pid_max
0 内核进程
1号进程是系统内部的第一个进程
0号进程启动1号进程
swap分区
创建进程的一般过程:
父进程:定义过的 子进程:新的没有被使用过的
1.给新建的进程分配一个进程标识符,在内核中创建PCD
2.复制父进程的环境
3.给子进程分配资源,(堆,代码,数据等)
4.复制父进程的地址空间内容到子进程的地址空间
5.将进程置为就绪态,放到就绪队列,等待CPU调度算法调度时,进入CPU分配内存