【学习笔记】Linux内核分析与应用 第三n章

目录

 

3.1进程概述

3.2 linux进程创建

进程和线程:

TASK_STRUCT结构具有统一性和多样性,内核如何对待进程、线程和内核线程?

do_fork在内核中的原型:

fork的实现:SIGCHID参数

vfork的实现:只传递两个标志过去

clone的实现

内核线程的创建

copy_process()

父子进程的资源共享——copy_xyz()

进程的生命周期

3.3 linux进程调度

调度的主战场——就绪队列

 进程优先级

内核空间的优先级

主调度器(schedule函数):

完全公平调度——CFS

Linux调度器总结:

编写一个程序,使用fork函数来创建一个子进程,并分别输出父子进程的进程ID

Linux内核状态有哪些,请画出状态转换图


3.1进程概述

通过调用fork系统调用来创建一个新的进程,新建的子系统也可以调用fork,从而形成进程树,可用ps指令查看。

进程控制块:

linux内核中把对进程的描述结构叫做task_struct结构。传统的书中,这样的数据结构叫做PCB进程控制块

进程控制块的信息分类:

 

进程的状态以及转换:

状态用来描述进程的动态变化

就绪 睡眠 运行

进程之间的亲属关系:

系统在创建进程时候具有父子关系,一个进程可以创建几个子进程,子进程之间具有兄弟关系。

进程控制块存放在内存的什么地方?

linux为了节省空间,把内核栈和一个紧挨着PCB的小数据结构thread_info放在一起,占用8KB内存

把PCB与内核栈放在一起有什么好处?

进程的组织方式——进程链表

0号进程永远不会被撤销,它的PCB被静态分配在内核的数据段中,也就是说list_head预先被编译器编译,在运行过程中保持不变,而其他PCB在进程运行的过程中由系统根据当前的内存状况随机分配,撤销时再归还给系统。

实例:

从进程到容器:

对于进程来说,它的静态表现就是程序,平时安安静静呆在磁盘上,一旦运行起来编程计算机中的数据和状态的综合,这就是他的动态表现。

 

3.2 linux进程创建

为啥觉得创建之后对其没有控制权?

创建这件事情完全由操作系统来控制,你只是发出一个创建请求。

进程和线程:

提出问题:

进程的资源到底有哪些,如何体现?

线程为什么是轻量级的运行单位,如何体现?

进程和线程几乎共享所有的资源,包括代码、数据、进程空间、打开的文件等。

线程只拥有自己的寄存器和栈。

TASK_STRUCT结构具有统一性和多样性,内核如何对待进程、线程和内核线程?

内核使用唯一的数据结构task_struct结构来分别表示他们,也使用相同的调度算法对

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值