《Linux内核设计与实现》读书笔记—进程管理

本文是《Linux内核设计与实现》的读书笔记,主要探讨了Linux中的进程管理,包括进程的概念、状态、创建、终结,以及独特的线程实现机制。通过fork()和exec()创建进程,内核通过PID标识进程,线程在Linux中被视为共享资源的进程。进程终结由do_exit()完成,涉及地址空间、信号、记账等资源的释放。

进程

  1. 进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间,一个或多个执行线程,存放全局变量的数据段。
  2. 每个线程都拥有一个独立的线程栈,线程寄存器和程序计数器。

  1. 一般会在栈顶创建一个结构体struct Thread_Info,该数据结构中保存指向进程描述符task_struct的指针。
  2. 内核通过一个唯一的进程标识符PID来 标识每个进程
  3. 一个进程必然处于五种进程状态中的一种:TASK_RUNNING,RASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE,_TASK_TRACED,TASK_STOPPED
  4. 当一个程序执行系统调用陷入了内核空间时,此时内核是在"代表该用户进程执行"并处于进程上下文中。与之相对的,当程序执行过程中发生了异常中断,中断处理程序并"不会代表任何进程执行",此时不存在进程上下文。
  5. Linux系统中所有进程都是PID为1的Init进程的后代。Init进程的进程描述符是作为init_task的静态变量分配的。

进程创建

  1. 与其他的操作系统提供的产生(spawn)进程的机制不同。Linux将创建进程和执行分解到了两个单独的函数fork()和exec()去执行。
  2. fork()通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅在于PID,PPID和某些资源和统计量(例如刮起的信号)。
  3. exec()函数负责读取可执行文件并将其载入地址空间开始运行。
以下是关于《Linux内核设计实现》的笔记: 1. 进程管理 - 进程控制块(Process Control Block, PCB):一个进程内核中的表示,包含了进程的状态、各种计数器和指针,以及进程所需要的资源。 - 进程调度:内核必须在可能的情况下公平地分配CPU时间片给每个进程Linux内核使用完全公平调度(Completely Fair Scheduler, CFS)来实现这一点。 - 进程同步:进程在访问共享资源时需要同步,以避免冲突。Linux内核提供了多种同步机制,如信号量、自旋锁和读写锁等。 2. 内存管理 - 虚拟内存:每个进程都拥有自己的虚拟内存空间,这使得每个进程都可以认为自己独占整个系统内存。 - 页面置换:当物理内存不足时,Linux内核会使用页面置换算法将一部分未使用的页面从物理内存中移出,以便为正在运行的进程腾出空间。 - 内存映射文件:Linux允许将磁盘上的文件映射到进程的虚拟地址空间中,这样就可以像访问内存一样访问文件。 3. 文件系统 - 虚拟文件系统(Virtual File System, VFS):Linux内核中的抽象层,它允许系统支持多种文件系统格式,如ext4、FAT32等。 - I/O管理:内核必须管理所有的I/O操作,包括磁盘读写和网络通信等。 - 文件描述符:Linux内核使用文件描述符来标识打开的文件,每个进程都有一个文件描述符表。 4. 网络协议栈 - TCP/IP协议栈:Linux内核支持多种网络协议,其中最常用的是TCP/IP协议栈。 - Socket:在Linux中,进程之间通信的主要方式是使用Socket。Socket是一种抽象的概念,它代表了一个网络连接。 5. 设备驱动程序 - 驱动程序开发:Linux内核的设备驱动程序通常是以模块的形式开发的,它们可以动态地加载和卸载。 - 设备文件:Linux内核将设备表示为文件,它们可以通过文件系统接口来访问。 以上是《Linux内核设计实现》的一些重点内容和笔记,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值