操作系统:管理系统调用接口
进程:进程就是运行起来的程序,站在操作系统的角度就是pcb,Linux是task_struct结构体
查看: /proc ps -ef ps aux getpid()
创建: fork--复制
状态:阻塞 就绪 运行
liunx下的进程状态:运行 R(task_runing)、可中断睡眠(S 可随时被唤醒)、
不可中断睡眠(D 使用特殊手段唤醒)、停止 T、僵尸 Z;死亡和追踪(不常用)
终止一个进程命令kill pid;kill -9 pid强制终止
僵尸进程:处于僵尸状态的进程
危害:资源泄漏
产生:子进程先于父进程退出,操作系统通知父进程,但是父进程没有管,然而操作系统不敢
擅自释放子进程的资源(一旦释放就没地方保存退出原因),因此子进程就成了僵尸进程
处理:退出父进程
预防:进程等待
孤儿进程: 父进程先于子进程退出子进程将称为孤儿进程,孤儿进程的父进程将变为1号init进程
并且孤儿进程退出,不会产生僵尸进程
守护进程/精灵进程:特殊的孤儿进程
进程优先级: 数字
功能:决定cpu资源的优先分配权
优先级查看:ps -l
优先级无法直接修改,但是可是设置NI的值进而对优先级做出修改
真正优先级计算公式 PRI=PRI+NI
修改命令: nice -n 5 renice
nice取值范围; -20——19
进程的相关概念:竞争性 独立性 并发性 并行性
环境变量:用于设置系统运行环境参数的变量---全局特性
查看: env set echo $NAME
声明一个环境变量 :export myval=1000 声明为环境变量
myval=1000 局部变量
删除一个环境变量: unset
作用:让程序运行更加高效,环境变量具有全局特性
如何在代码中获取环境变量:
getenv() main第三个参数 全局变量 char**environ
程序地址空间:
每个程序都有自己的程序地址空间
内存地址:内存区域的编号
我们常说的程序地址空间,实际上是一个进程的虚拟地址空间,目的是为了告诉进程
每个进程都有一个完成的连续的内存,但是真正一个进程使用的内存经过页表映射之后
可能智能使用很少的一部分物理地址
页表:记录虚拟地址与物理地址的映射关系,并且对内存进行访问控制
写时拷贝技术:---提高创建子进程的效率
分页式内存管理:提高内存利用率,内存访问控制
进程调度:cpu调度进程调度的就是pcb
大O(1)调度算法