进程概念
进程概念
冯诺依曼体系结构:
冯诺依曼 奠定现代计算机已经体系结构,二进制存储
现代计算机五大硬件单元:
输入设备:键盘
输出设备:显示器
` 存储器: 内存
运算器:CPU
控制器:
辨析内存 主存 寄存器 计数器 内存
操作系统:
**基本功能:**统筹管理计算机资源;对下管理软硬件资源,对上提供良好的执行环境
1)防止是失控的应用对硬件乱用
2)向应用程序提供简单的机制来控制硬件。
通过几个基本的抽象概念(进程,虚拟内存,文件)来实现功能,先描述再组织
库函数和系统调用关系:上下级调用关系,库函数就是对系统调用接口的一层封装
进程概念
**进程:**正在运行的程序的抽象
**程序:**可执行的的代码存放在硬盘 运行的时候加载到内存中
操作系统管理进程:描述进程 PCB 操作系统通过PCB管理运行中的程序 ,一个进程切换到另一个进程的转换是由操作系统内核管理的,内核不是一个独立的进程,而是系统管理所有进程所用代-代码数据结构的集合
task_struct-PCB的一种
在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息
描述信息: 进程标识符(PID),进程状态,优先级,程序计数器,上下文数据,记账信息,内存指针,I/O状态信息!
进程查看:
/proc
ps -ef
ps -aux
getpid() 获取调用进程的的ID
进程状态
一般操作系统大致可分为这三种状态:就绪 ,阻塞,运行
Linux下进程的状态:
R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptiblesleep)
**D磁盘休眠状态(Disk sleep)**有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
**X死亡状态(dead):**这个状态只是一个返回状态,你不会在任务列表里看到这个状态
**僵死状态(Zombies)**是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,后面讲)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程,僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
来一个创建维持30秒的僵死进程例子:
僵尸进程:处于僵死状态的进程
产生原因:
1.子进程先于父进程退出,操作系统检测到进程的退出
危害:资源泄露
处理:关闭父进程
孤儿进程:
父进程先于子进程退出,子进程成为后台进程,父进程成为1号进程
进程优先级
交互式进程
批处理进程
设置:ps -efl
PRI 优先级 NI nice值:PRI无法直接操作设置,但是可以通过设置NI值,进而调整PRI值
PIR=PIR+NI
renice -n size -p pid
I/O密集型程序
数据密集型程序
并行:
并发:
独立性:
竞争性:
环境变量:
查看环境变量:查看 env set
设置环境变量:
export
unset
常见环境变量
环境变量的继承特性:子进程获取父进程的变量
获取全局变量:
main(int argc,char* argv[], char* env)
extern char** environ;
char* getenv()
虚拟内存
概念:每个进程看到的内存空间都是一样的,称为虚拟内存空间