思维导图备注

Linux内核设计的艺术_图解Linux操作系统架构设计与实现原理
首页 收藏书籍 阅读记录
  • 书签 我的书签
  • 添加书签 添加书签 移除书签 移除书签

5.6.2 shell进程将自己挂起,然后准备切换到str1执行

浏览 1 扫码
  • 小字体
  • 中字体
  • 大字体
2022-01-24 09:56:47
请 登录 再阅读
上一篇:
下一篇:
  • 书签
  • 添加书签 移除书签
  • 本书导读
  • 前言
  • 第1章 从开机加电到执行main函数之前的过程
    • 1.1.2 BIOS在内存中加载中断向量表和中断服务程序
    • 1.2 加载操作系统内核程序并为保护模式做准备
      • 1.2.2 加载第二部分代码—setup
      • 1.2.3 加载第三部分代码—system模块
    • 1.3 开始向32位模式转变,为main函数的调用做准备
      • 1.3.2 设置中断描述符表和全局描述符表
      • 1.3.3 打开A20,实现32位寻址
      • 1.3.4 为在保护模式下执行head.s做准备
      • 1.3.5 head.s开始执行
    • 1.4 本章小结
  • 第2章 从main到怠速
    • 2.1.2 物理内存规划格局
    • 2.2 进程创建的最基本动作
      • 2.2.2 在进程槽中为进程1申请一个空闲位置并获取进程号
      • 2.2.3 复制进程信息之前,先将一些数据压栈
      • 2.2.4 初步设置进程1管理结构
      • 2.2.5 进程0创建进程1的过程中发生时钟中断
      • 2.2.6 从时钟中断返回
      • 2.2.7 调整进程1管理结构
      • 2.2.8 设置进程1的线性地址空间及物理页面
      • 2.2.9 继续调整进程1管理结构
      • 2.2.10 操作系统如何区分进程0和进程1
      • 2.2.11 进程0准备切换到进程1
      • 2.2.12 系统切换到进程1执行
    • 2.1.3 虚拟盘设置与初始化
    • 2.3 加载根文件系统
      • 2.3.2 进程1开始执行
      • 2.3.3 进程1开始以数据块的形式操作硬盘
      • 2.3.4 将找到的缓冲块与请求项挂接
      • 2.3.5 将请求项与硬盘处理函数挂接
      • 2.3.6 进行硬盘读盘前的准备工作
      • 2.3.7 给硬盘下达读盘指令
      • 2.3.8 进程1由于等待读盘操作挂起
      • 2.3.9 系统切换到进程0执行
      • 2.3.10 进程0的执行过程
      • 2.3.11 进程0执行过程中发生硬盘中断
      • 2.3.12 硬盘中断服务程序响应后,进程0继续执行
      • 2.3.13 再次响应硬盘中断并唤醒进程1
      • 2.3.14 读盘操作完成后,进程1继续执行
      • 2.3.15 进程1继续设置硬盘管理结构
      • 2.3.16 进程1获取软盘超级块,为加载根文件系统做准备
      • 2.3.17 进程1备份超级块数据
      • 2.3.18 进程1将根文件系统从软盘拷贝到虚拟盘
      • 2.3.19 进程1开始加载根文件系统
      • 2.3.20 进程1准备加载根文件系统超级块
      • 2.3.21 进程1加载根文件系统超级块
      • 2.3.22 进程1继续加载根文件系统
      • 2.3.23 进程1准备读取根目录i节点
      • 2.3.24 进程1加载根目录i节点
      • 2.3.25 进程1结束加载根文件系统的过程
    • 2.1.4 内存管理结构mem_map初始化
    • 2.4 打开终端设备文件及复制文件句柄
      • 2.4.2 确定打开操作的起点
      • 2.4.3 获得枝梢i节点—dev目录文件的i节点
      • 2.4.4 确定dev目录文件i节点为枝梢i节点
      • 2.4.5 继续返回枝梢i节点
      • 2.4.6 查找tty0文件的i节点
      • 2.4.7 将tty0设备文件的i节点返回给sys_open系统调用
      • 2.4.8 分析tty0文件i节点
      • 2.4.9 设置文件管理结构并返回给用户进程
      • 2.4.10 进程1复制tty0文件句柄
      • 2.4.11 进程1继续复制tty0文件句柄
    • 2.1.5 异常处理类中断服务程序挂接
    • 2.5 创建进程2
      • 2.5.2 复制进程2管理结构并进行调整
      • 2.5.3 设置进程2的页目录项并复制进程2的页表
      • 2.5.4 调整进程2管理结构中与文件有关的内容
      • 2.5.5 进程1执行过程中发生时钟中断
      • 2.5.6 进程1从时钟中断返回,准备切换到进程2
    • 2.1.6 初始化块设备请求项结构
    • 2.6 进程1等待进程2退出
      • 2.6.2 对进程2的状态进行处理
      • 2.6.3 切换到进程2执行
    • 2.1.7 与建立人机交互界面相关的外设的中断服务程序挂接
    • 2.7 shell程序的加载
      • 2.7.2 为打开/etc/rc文件做准备
      • 2.7.3 进程2打开“/etc/rc”配置文件
      • 2.7.4 通过压栈为加载shell文件做准备
      • 2.7.5 为参数和环境变量设置做准备
      • 2.7.6 得到shell文件的i节点
      • 2.7.7 为加载参数和环境变量做准备
      • 2.7.8 根据i节点,对shell文件进行检测
      • 2.7.9 检测shell文件头
      • 2.7.10 备份文件头并进行分析
      • 2.7.11 对shell文件进行进一步分析
      • 2.7.12 拷贝参数和环境变量
      • 2.7.13 调整进程2的管理结构
      • 2.7.14 继续调整进程2管理结构
      • 2.7.15 释放进程2继承的页面
      • 2.7.16 检测协处理器
      • 2.7.17 调整shell程序所在的线性空间地址
      • 2.7.18 为shell程序准备参数和环境变量
      • 2.7.19 继续调整进程2管理结构
      • 2.7.20 调整EIP,使其指向shell程序入口地址
      • 2.7.21 shell程序执行引发缺页中断
      • 2.7.22 缺页中断中shell程序加载前的检测
      • 2.7.23 为即将载入的内容申请页面
      • 2.7.24 将shell程序载入新获得的页面
      • 2.7.25 根据shell程序的情况,调整页面的内容
      • 2.7.26 将线性地址空间与程序所在的物理页面对应
    • 2.1.8 开机启动时间设置
    • 2.8 系统实现怠速
      • 2.8.2 进程2开始执行/etc/rc文件
      • 2.8.3 准备加载update进程
      • 2.8.4 update进程的作用
      • 2.8.5 shell程序检测“/etc/rc”文件
      • 2.8.6 shell进程退出
      • 2.8.7 shell进程退出善后处理
      • 2.8.8 进程1清理shell进程管理结构
      • 2.8.9 系统开始重建shell
      • 2.8.10 shell进程为何不会再次退出
    • 2.1.9 系统开始激活进程0
    • 2.9 小结
    • 2.1.10 进程相关事务初始化设置
    • 2.1.11 时钟中断设置
    • 2.1.12 系统调用服务程序挂接
    • 2.1.13 初始化缓冲区管理结构
    • 2.1.14 初始化硬盘
    • 2.1.15 初始化软盘
    • 2.1.16 开中断
  • 第3章 安装文件系统
    • 3.1.2 从分析路径开始,准备查找hd1设备的挂接点
    • 3.2 获取虚拟盘上的挂接点
    • 3.1.3 以根目录i节点为依托,得到dev目录文件的i节点
    • 3.3 得到hd1设备文件的超级块
      • 3.3.2 为hd1设备文件的超级块找到存储位置
      • 3.3.3 初始化空闲超级块并加锁
      • 3.3.4 从硬盘获得hd1设备文件的超级块
      • 3.3.5 加载逻辑块位图和i节点位图
    • 3.1.4 从dev目录文件中找到代表hd1设备文件的目录项
    • 3.4 将hd1设备文件与mnt目录文件的i节点挂接
    • 3.1.5 得到hd1设备文件的i节点号
    • 3.5 小结
    • 3.1.6 释放dev目录文件的相关内容
    • 3.1.7 得到hd1设备文件的i节点
    • 3.1.8 获得hd1设备的设备号
    • 3.1.9 释放hd1设备文件的i节点
  • 第4章 文件操作
    • 4.1.2 建立用户进程与文件管理表的关系
    • 4.2 读文件
      • 4.2.2 确定要读入的数据块的位置
      • 4.2.3 将指定的数据块从硬盘读入到高速缓冲块
      • 4.2.4 将数据拷贝到用户指定的内存
    • 4.1.3 从硬盘上获取helloc.txt文件的i节点
    • 4.3 新建文件
      • 4.3.2 为hello.txt文件新建一个i节点
      • 4.3.3 为hello.txt文件新建目录项
      • 4.3.4 完成hello.txt新建操作并返回给用户进程
    • 4.1.4 将helloc.txt文件与文件管理表相挂接
    • 4.4 写文件
      • 4.4.2 确定hello.txt文件的写入位置
      • 4.4.3 为数据的写入申请缓冲块
      • 4.4.4 将指定的写入数据从用户数据区拷贝到缓冲块
      • 4.4.5 数据同步到硬盘的方法1
      • 4.4.6 将文件写入硬盘的情况2
    • 4.5 修改文件
      • 4.5.2 对文件进行修改
    • 4.6 关闭文件
      • 4.6.2 将文件管理表中hello.txt对应的引用次数减1
      • 4.6.3 hello.txt文件与文件管理表“脱钩”
    • 4.7 删除文件
      • 4.7.2 删除hello.txt文件在硬盘上对应的数据和i节点
      • 4.7.3 对hello.txt文件所在的user目录做处理
    • 4.8 本章小结
  • 第5章 用户进程与内存管理
    • 5.1.2 为str1进程管理结构找到存储空间
    • 5.2 为用户进程str1的加载做准备
      • 5.2.2 读取str1可执行文件的i节点并统计参数和环境变量
      • 5.2.3 读取str1可执行文件的文件头
      • 5.2.4 对str1可执行程序文件头进行分析
      • 5.2.5 拷贝str1可执行程序的参数和环境变量
      • 5.2.6 调整str1进程管理结构中可执行程序对应的i节点
      • 5.2.7 继续调整str1进程管理结构—文件和信号相关的字段
      • 5.2.8 释放str1进程的页表
      • 5.2.9 重新设置str1的程序代码段和数据段
      • 5.2.10 创建环境变量和参数指针表
      • 5.2.11 继续根据str1可执行程序情况调整str1进程管理结构
      • 5.2.12 设置str1可执行程序的栈指针和eip值
    • 5.1.3 复制str1进程管理结构
    • 5.3 对缺页中断的处理
      • 5.3.2 为str1程序申请一个内存页面
      • 5.3.3 将str1程序加载到新分配的页面中
      • 5.3.4 检测是否需要对页面剩余空间清0
      • 5.3.5 将str1程序占用的物理内存地址与str1进程的线性地址空间对应
      • 5.3.6 不断通过缺页中断加载str1程序的全部内容
      • 5.3.7 str1程序需要压栈
      • 5.3.8 str1程序第一次调用foo程序压栈
      • 5.3.9 str1程序第二次压栈,产生缺页中断
      • 5.3.10 处理str1程序第二次压栈产生的缺页中断
      • 5.3.11 str1程序继续执行,反复压栈并产生缺页中断
      • 5.3.12 str1程序运行结束后清栈
    • 5.1.4 确定str1进程在线性空间中的位置
    • 5.4 str1用户进程的退出
      • 5.4.2 释放str1程序所占页面
      • 5.4.3 解除str1程序与文件有关的内容并给父进程发信号
      • 5.4.4 str1程序退出后执行进程调度
    • 5.1.5 复制str1进程页表并设置其对应的页目录项
    • 5.5 多个用户进程“同时”运行
      • 5.5.2 str1进程压栈的执行效果
      • 5.5.3 str1运行过程中产生时钟中断并切换到str2执行
      • 5.5.4 str2执行过程遇到时钟中断切换到str3执行
      • 5.5.5 三个程序执行一段时间后在主内存的分布格局
    • 5.1.6 调整str1进程中与文件相关的结构
    • 5.6 进程的调度与切换
      • 5.6.2 shell进程将自己挂起,然后准备切换到str1执行
      • 5.6.3 准备切换到str1进程执行
      • 5.6.4 str1执行时发生时钟中断
      • 5.6.5 时钟中断递减str1运行的时间片
      • 5.6.6 str1执行一段时间后挂起,shell进程新建str2进程
      • 5.6.7 str2运行期间发生时钟中断
      • 5.6.8 系统切换到str1程序执行
    • 5.1.7 建立str1进程与全局描述符表GDT的关联
    • 5.7 内核的分页
      • 5.7.2 设置内核对应的页目录项和页表项的内容
      • 5.7.3 设置内核对应的全局描述符表GDT
    • 5.1.8 将str1进程设为就绪态
    • 5.8 页写保护
      • 5.8.2 进程A准备进行压栈操作
      • 5.8.3 进程A的压栈动作引发页写保护
      • 5.8.4 将进程A的页表指向新申请的页面
      • 5.8.5 拷贝原页面内容到进程A新申请的页面
      • 5.8.6 进程B准备操作共享页面
      • 5.8.7 假设进程B先执行压栈操作的情况
    • 5.9 小结
  • 第6章 多个进程“同时”操作一个文件
    • 6.1.2 进程A读取hello.txt文件并由于等待硬盘中断而被系统挂起
    • 6.2 缓冲区与外设的数据同步
      • 6.2.2 继续执行引发缓冲块数据需要同步
      • 6.2.3 将缓冲区中的数据同步到硬盘上
      • 6.2.4 进程A由于等待空闲请求项而被系统挂起
      • 6.2.5 进程B开始执行
      • 6.2.6 进程B也被挂起
      • 6.2.7 进程C开始执行并随后被挂起
      • 6.2.8 进程A和进程C均被唤醒
      • 6.2.9 进程B切换到进程A执行
    • 6.1.3 进程B准备打开hello.txt文件
    • 6.3 小结
    • 6.1.4 系统准备为进程B获取hello.txt文件的i节点
    • 6.1.5 系统找到hello.txt文件已经载入的i节点
    • 6.1.6 系统准备为进程B从硬盘上读取hello.txt文件
    • 6.1.7 系统找到了正在操作的缓冲块,将进程B挂起
    • 6.1.8 系统再次切换到进程0执行
    • 6.1.9 进程C启动并打开hello.txt文件
    • 6.1.10 进程C也由于等待缓冲块解锁而被系统挂起
    • 6.1.11 缓冲块解锁后先唤醒进程C
    • 6.1.12 系统将进程B设为就绪状态
    • 6.1.13 系统将指定数据写入缓冲块
    • 6.1.14 写入完成后,进程C继续执行
    • 6.1.15 进程C准备切换到进程B
    • 6.1.16 进程C切换到进程B执行,进程B唤醒进程A
    • 6.1.17 进程B不断执行,直到时间片减为0后切换到进程A执行
    • 6.1.18 进程A、B、C退出,写入数据由update进程同步
  • 第7章 IPC问题
    • 7.1.2 为管道文件与进程建立联系创造条件
    • 7.2 信号机制
      • 7.2.2 processig进程进入可中断等待状态
      • 7.2.3 sendsig进程开始执行并向processig进程发信号
      • 7.2.4 系统检测当前进程接收到信号并准备处理
      • 7.2.5 系统检测信号处理函数指针挂接是否正常
      • 7.2.6 调整processig进程的内核栈结构,使之先执行信号处理函数
      • 7.2.7 信号对进程执行状态的影响
    • 7.1.3 创建管道文件i节点
    • 7.3 小结
    • 7.1.4 将管道文件i节点与文件管理表建立联系
    • 7.1.5 将管道文件句柄返回给用户进程
    • 7.1.6 读管道进程开始操作管道文件
    • 7.1.7 写管道进程向管道中写入数据
    • 7.1.8 写管道进程继续向管道写入数据
    • 7.1.9 写管道进程已将管道空间写满
    • 7.1.10 写管道进程挂起
    • 7.1.11 读管道进程从管道中读出数据
    • 7.1.12 读管道进程继续执行,不断从管道中读出数据
    • 7.1.13 读管道进程执行中发生时钟中断
    • 7.1.14 读管道进程执行过程中再次发生时钟中断
    • 7.1.15 读管道进程切换到写管道进程执行
    • 7.1.16 写管道进程挂起切换到读管道进程执行
    • 7.1.17 读管道进程继续执行,直到把管道中的数据读完
    • 7.1.18 读取完成后,读进程挂起,写进程继续执行
  • 第8章 操作系统的设计指导思想
    • 8.2 操作系统的设计指导思想—主奴机制
      • 8.2.2 操作系统在内存管理中的主奴机制
      • 8.2.3 操作系统在文件系统中体现的主奴机制
    • 8.3 实现主奴机制的三种关键技术
      • 8.3.2 特权级
      • 8.3.3 中断
    • 8.4 建立主奴机制的决定性因素—先机
    • 8.5 软件和硬件的关系:主机与进程、外设与文件
      • 8.5.2 文件与数据存储
    • 8.6 父子进程共享页面
    • 8.7 操作系统的全局中断与进程的局部中断—信号
    • 8.8 小结
    • 结束语
  • “新设计团队”简介
  • 附录 搭建Linux 0.11系统环境
暂无相关搜索结果!
    展开/收起文章目录

    二维码

    手机扫一扫,轻松掌上学

    《Linux内核设计的艺术_图解Linux操作系统架构设计与实现原理》电子书下载

    请下载您需要的格式的电子书,随时随地,享受学习的乐趣!
    EPUB 电子书

    书签列表

      阅读记录

      阅读进度: 0.00% ( 0/0 ) 重置阅读进度