admin管理员组

文章数量:1023903

操作系统实验

作者寄语

操作系统实验的学习是一个循序渐进的过程,初次看linux-0.11中的代码,看着满屏的汇编语言,确实头疼。但通过学习赵炯博士的Linux内核0.11完全注释,结合着王爽老师的汇编语言一书,我逐渐理解每段汇编语言的含义和作用。本文主要是通过对哈工大李治军配套实验的实现,着重解释每一段的汇编代码,使读者对实验的整体脉络有一个初步的认识,不再因为畏惧汇编而不放弃实验。本文只是抛砖引玉,希望读者可以深入研究我下文提供的参考资料,做到理论与实践兼具。

参考资料

  • 视频:操作系统
  • 书籍:现代操作系统
  • 实验:操作系统原理与实践
  • 书籍:王道操作系统
  • 书籍:Linux内核完全注释
  • 书籍:汇编语言(第3版) 王爽著

目录

文章目录

  • 操作系统实验
    • 作者寄语
    • 参考资料
    • 目录
    • 实验一 熟悉实验环境
    • 实验二 操作系统的引导
      • 汇编知识
        • int 0x10
        • int 0x13
        • int 0x15
        • int 0x41
        • CF
        • jnc
        • jl
        • lds
        • DF标志和串传送指令
        • call
        • ret
      • 改写bootsect.s
      • bootsect.s读入setup.s
      • setup.s获取基本硬件参数
      • 天道酬勤
    • 实验三 系统调用
      • 提醒
      • 实验目的
      • 应用程序如何调用系统调用
      • 从“int 0x80”进入内核函数
      • 实现 sys_iam() 和 sys_whoami()
      • 按照上述逻辑修改相应文件
      • 修改 Makefile
        • (1)第一处
        • (2)第二处
      • 编写测试程序
      • 天道酬勤
    • 实验四 进程运行轨迹的跟踪与统计
      • 实验目的
      • 实验内容
      • 编写process.c文件
        • 提示
        • 文件主要作用
        • 关键函数解释
          • fork()
          • struct tms 结构体
          • 数据类型 clock_t
        • 代码实现
        • 答疑
      • 尽早打开log文件
        • 小结
      • 编写fprintk()函数
      • jiffies,滴答
      • 寻找状态切换点
        • 例子 1:记录一个进程生命期的开始
        • 例子 2:记录进入睡眠态的时间
        • 修改fork.c文件
        • 修改sched.c文件
          • 修改schedule函数
          • 修改sys_pause函数
          • 修改sleep_on函数
          • 修改interruptible_sleep_on函数
          • 修改wake_up函数
        • 修改exit.c文件
        • 小结
      • 编译
      • 编译运行process.c
      • process.log自动化分析
      • 修改时间片
      • 问题回答
        • 问题1:单进程编程和多进程编程的区别?
        • 问题2:仅针对样本程序建立的进程,在修改时间片前后,log 文件的统计结果都是什么样?结合你的修改分析一下为什么会这样变化,或者为什么没变化?
      • 警示
      • 天道酬勤
    • 实验五 基于内核栈切换的进程切换
      • 实验目的
      • 实验内容
      • TSS 切换
      • 本次实验的内容
      • 正式修改代码前小结
      • schedule 与 switch_to
      • 实现 switch_to
      • 修改fork()系统调用
      • 编译运行
      • 天道酬勤
    • 实验六 信号量的实现和应用
      • 实验目的
      • 实验内容
        • 用信号量解决生产者—消费者问题
        • 实现信号量
      • 什么是信号量?
      • 思路
      • 用户程序 pc.c
        • 知识点
        • 信号量作用
        • 代码展示
      • 修改内核
        • 编写 sem.h
        • 编写 sem.c
        • 添加系统调用号
        • 改写系统调用数
        • 添加系统调用的定义
        • 修改工程文件的编译规则
        • Debug
      • 挂载文件
      • 测试
      • 天道酬勤
    • 实验七 地址映射与共享
      • 实验目的
      • 实验内容
        • 1 跟踪地址翻译过程
        • 2 基于共享内存的生产者—消费者程序
        • 3 共享内存的实现
      • 创建test.c
      • 跟踪地址翻译过程
        • 1.准备
        • 2.暂停
        • 3.段表
        • 4.段描述符
        • 5.段基址和线性地址
        • 6.页表
        • 7.物理地址
      • 添加系统调用号
      • 添加系统调用的定义
      • 改写系统调用数
      • 编写 shm.c
      • 修改工程文件的编译规则
      • 编写消费者和生产者程序
        • 编写producer.c
        • 编写consumer.c
      • 运行验证
      • 天道酬勤
    • 实验八 终端设备的控制
      • 实验目的
      • 实验内容
      • 实验思路
        • 键盘中断初始化
        • 键盘中断发生
        • 字符输出流程
      • 添加`F12`功能键盘处理
      • 添加字符`*`显示处理
      • 编译运行
      • 实验问题
      • 天道酬勤
    • 实验九 proc文件系统的实现
      • 实验目的
      • 实验内容
      • procfs介绍
      • 增加新文件类型
      • 让 `mknod()` 支持新的文件类型
      • `procfs` 的初始化工作
      • 让 `proc` 文件可读
      • 实现 `proc_read` 函数
      • 编译运行
      • 天道酬勤
    • 终章

实验一 熟悉实验环境

只是熟悉实验环境&

操作系统实验

作者寄语

操作系统实验的学习是一个循序渐进的过程,初次看linux-0.11中的代码,看着满屏的汇编语言,确实头疼。但通过学习赵炯博士的Linux内核0.11完全注释,结合着王爽老师的汇编语言一书,我逐渐理解每段汇编语言的含义和作用。本文主要是通过对哈工大李治军配套实验的实现,着重解释每一段的汇编代码,使读者对实验的整体脉络有一个初步的认识,不再因为畏惧汇编而不放弃实验。本文只是抛砖引玉,希望读者可以深入研究我下文提供的参考资料,做到理论与实践兼具。

参考资料

  • 视频:操作系统
  • 书籍:现代操作系统
  • 实验:操作系统原理与实践
  • 书籍:王道操作系统
  • 书籍:Linux内核完全注释
  • 书籍:汇编语言(第3版) 王爽著

目录

文章目录

  • 操作系统实验
    • 作者寄语
    • 参考资料
    • 目录
    • 实验一 熟悉实验环境
    • 实验二 操作系统的引导
      • 汇编知识
        • int 0x10
        • int 0x13
        • int 0x15
        • int 0x41
        • CF
        • jnc
        • jl
        • lds
        • DF标志和串传送指令
        • call
        • ret
      • 改写bootsect.s
      • bootsect.s读入setup.s
      • setup.s获取基本硬件参数
      • 天道酬勤
    • 实验三 系统调用
      • 提醒
      • 实验目的
      • 应用程序如何调用系统调用
      • 从“int 0x80”进入内核函数
      • 实现 sys_iam() 和 sys_whoami()
      • 按照上述逻辑修改相应文件
      • 修改 Makefile
        • (1)第一处
        • (2)第二处
      • 编写测试程序
      • 天道酬勤
    • 实验四 进程运行轨迹的跟踪与统计
      • 实验目的
      • 实验内容
      • 编写process.c文件
        • 提示
        • 文件主要作用
        • 关键函数解释
          • fork()
          • struct tms 结构体
          • 数据类型 clock_t
        • 代码实现
        • 答疑
      • 尽早打开log文件
        • 小结
      • 编写fprintk()函数
      • jiffies,滴答
      • 寻找状态切换点
        • 例子 1:记录一个进程生命期的开始
        • 例子 2:记录进入睡眠态的时间
        • 修改fork.c文件
        • 修改sched.c文件
          • 修改schedule函数
          • 修改sys_pause函数
          • 修改sleep_on函数
          • 修改interruptible_sleep_on函数
          • 修改wake_up函数
        • 修改exit.c文件
        • 小结
      • 编译
      • 编译运行process.c
      • process.log自动化分析
      • 修改时间片
      • 问题回答
        • 问题1:单进程编程和多进程编程的区别?
        • 问题2:仅针对样本程序建立的进程,在修改时间片前后,log 文件的统计结果都是什么样?结合你的修改分析一下为什么会这样变化,或者为什么没变化?
      • 警示
      • 天道酬勤
    • 实验五 基于内核栈切换的进程切换
      • 实验目的
      • 实验内容
      • TSS 切换
      • 本次实验的内容
      • 正式修改代码前小结
      • schedule 与 switch_to
      • 实现 switch_to
      • 修改fork()系统调用
      • 编译运行
      • 天道酬勤
    • 实验六 信号量的实现和应用
      • 实验目的
      • 实验内容
        • 用信号量解决生产者—消费者问题
        • 实现信号量
      • 什么是信号量?
      • 思路
      • 用户程序 pc.c
        • 知识点
        • 信号量作用
        • 代码展示
      • 修改内核
        • 编写 sem.h
        • 编写 sem.c
        • 添加系统调用号
        • 改写系统调用数
        • 添加系统调用的定义
        • 修改工程文件的编译规则
        • Debug
      • 挂载文件
      • 测试
      • 天道酬勤
    • 实验七 地址映射与共享
      • 实验目的
      • 实验内容
        • 1 跟踪地址翻译过程
        • 2 基于共享内存的生产者—消费者程序
        • 3 共享内存的实现
      • 创建test.c
      • 跟踪地址翻译过程
        • 1.准备
        • 2.暂停
        • 3.段表
        • 4.段描述符
        • 5.段基址和线性地址
        • 6.页表
        • 7.物理地址
      • 添加系统调用号
      • 添加系统调用的定义
      • 改写系统调用数
      • 编写 shm.c
      • 修改工程文件的编译规则
      • 编写消费者和生产者程序
        • 编写producer.c
        • 编写consumer.c
      • 运行验证
      • 天道酬勤
    • 实验八 终端设备的控制
      • 实验目的
      • 实验内容
      • 实验思路
        • 键盘中断初始化
        • 键盘中断发生
        • 字符输出流程
      • 添加`F12`功能键盘处理
      • 添加字符`*`显示处理
      • 编译运行
      • 实验问题
      • 天道酬勤
    • 实验九 proc文件系统的实现
      • 实验目的
      • 实验内容
      • procfs介绍
      • 增加新文件类型
      • 让 `mknod()` 支持新的文件类型
      • `procfs` 的初始化工作
      • 让 `proc` 文件可读
      • 实现 `proc_read` 函数
      • 编译运行
      • 天道酬勤
    • 终章

实验一 熟悉实验环境

只是熟悉实验环境&

本文标签: 哈工大一到合集操作系统李治军