进程

page

1page=4096B

操作系统按page管理内存。每个page,可以设置读写访问控制属性。

虚拟内存空间

每个进程拥有4G的虚拟内存空间,由操作系统映射到物理地址。其中0~3G为用户空间,3~4G为内核空间。

内核空间

内核空间存储PCB等信息,由多个进程共享。进程无法访问内核空间。

用户空间

进程只能读写自己的用户空间。
内容包括
- 栈空间
- 堆
- 代码段(text)
- …

PCB

进程控制块。内核为进程创建PCB来维护进程相关信息。
- pid
- 进程状态
- 进程切换的CPU寄存器
- 虚拟地址空间信息
- 当前工作目录
- umask掩码
- 文件描述符表
- 用户id, 组id
- 控制终端, session和进程组

进程id,父进程id,进程组id

每个进程有一个进程id,
进程的父id为调用fork的id;
父、子进程共享进程组id。
进程组id与父进程id相同。

进程原语

fork

进程复制0~3G用户空间和内核空间的PCB, 但id不同。
fork调用一次,返回两次,父进程返回子进程pid,子进程返回0.

  1. create()
  2. clone()
  3. return

fork时,并不会立即复制父进程内存空间,而是采用copy on write, 即读时共享,写时拷贝

exec族

加载一个新的程序,替换掉当前程序的代码段,堆栈等。

fork后,多半会exec。 因为fork时,并不会立即clone父进程内存。

wait/waitpid

僵尸进程:子进程用户空间已释放,PCB等待父进程回收。未回收时为僵尸态。
孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程。

wait为阻塞函数,等待回收子进程的资源。如果没有子进程,返回-1.
waitpid()
- 参数为负, 代表进程组id
- 参数为0,代表当前进程组内所有子进程
- 参数为正,具体子进程

当一个进程成为孤儿进程时,其父进程自动更改为init进程(1号进程)。称为init领养子进程。

进程间关系

终端

init–>fork–>exec–>getty–>输入账号–>输入密码–>exec–>shell

进程组

进程组id = 组长进程id

会话

一个或多个进程组的集合

守护进程

后台服务,生存周期较长。独立于控制终端并周期性地执行某种任务或等待处理某些发生的事情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值