linux内核从菜鸟起步(三)

6.进程管理

程序是存储在某种存储介质上的可执行文件,是目标码和用户数据的集合。程序装载进内存后可以执行,处于可执行状态的程序称为进程。但是进程并不仅仅局限于一段可执行代码以及一些用户数据,通常它还包括很多其他的资源,比如打开的文件、用于保存临时数据的堆栈、挂起的信号等。因此,进程可以看作处于执行状态的程序以及它所包含的资源的总称。

从内核的角度来看,进程是操作系统分配内存、CPU时间片等资源的基本单位,为正在运行的程序提供的运行环境。它代表了一个执行过程,是一个动态的实体,随着程序中指令的执行而不断变化。

线程是在进程的基础上进一步的抽象,一个进程可以分为两个部分:线程集合和资源集合。线程是进程中的一个动态对象,是一组独立的指令流,进程中的所有线程将共享进程里的资源,单同时各个线程也拥有独立的程序计数器、堆栈和寄存器上下文。所有的进程都至少拥有一个线程。相对于进程是操作系统进行资源管理的最小单元,线程是程序执行的最小单元。

6.1 进程描述符

主要组成部分:

  • 进程状态信息:描述进程当前状态
  • 进程调度信息:由调度进程使用,决定系统中哪个进程最应该运行
  • 标识符(Identifiers):进程相关的一些标识符
  • 进程间通信(IPC,Inter-Process Communication):Linux支持经典的UNIX IPC机制,如信号(Signals)、管道(Pipes),也支持System V IPC机制,如共享内存(Shared Memory)、信号量和消息队列(Message Queues)
  • 进程组织信息
  • 时间和定时器
  • 文件系统信息
  • 虚拟内存
  • 和处理器相关的上下文信息
  • 多处理器系统相关信息

6.2 进程标识符

(1) 进程标识符 pid:与进程一一对应,内核通过进程标识符来识别不同的进程

(2) 线程组标识符 TGID : 通过进程描述符的thread_group字段,统一线程组中的所有轻量级进程组成一个双向链表,线程组标识符TGID即为线程组中第一个轻量级进程的PID

(3) 用户和组标识符 : 运行进程的用户的标志符和该用户所属用户组的标志符。

(4)有效用户和组标识符euid、egid:有些程序可以在执行过程中将进程的uid和gid改成其程序自身的uid和gid。这些程序被称为setuid程序,常在严格控制对某些服务的访问时使用,特别是那些为别的进程而运行的进程,如网络后台进程。

(5) 备份用户和组标识符suid、sgid: POSIX标准要求实现这两个标志,它们被那些通过系统调用改变进程uid和gid的程序使用。当进程的原始uid和gid变化时,它们被用来保存真正的uid和gid。

(6)文件系统用户和组标识符fsuid、fgid: 用来检验进程的文件系统访问权限。

6.3 进程0和进程1

进程0创建进程1,即init进程之后,它就执行cpu_idle函数进入无限循环,因此进程0又被称之为idle进程。当没有其他进程处于TASK_RUNNING时,进程0被执行。

第9章 内存管理

内存是CPU能够访问的大容量高速存储区域,是现代计算机运行的中心。CPU通过地址可以随机访问内存单元的字或字节。

  • 物理地址:内存单元所对应的 实际的地址
  • 逻辑地址:程序操作访问的内存地址,基于段基址的一个段内偏移地址,虚拟地址
  • 线性地址:CPU通过总线操作的内存地址,由段基址和段内偏移组合得到线性地址

从虚拟地址到物理地址的转换由硬件MMU(内存管理单元)来完成

kernel里所有的线程共享1G的地址空间,每个应用进程都是独立私有的3GB的地址空间,互相之间不干扰

物理内存分为固定大小的块,称为帧或页。虚拟地址包含页号和页内偏移,页号作为页表的索引通过MMU映射到物理内存的基地址,再加上页内偏移就得到完整的物理地址。

转载于:https://my.oschina.net/u/3227348/blog/3032024

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值