文章目录

  • 专栏博客链接
  • 相关查阅博客链接
  • 本书中错误勘误
  • 部分缩写熟知
  • 实现exec的思路与启发
  • 遗憾告终

专栏博客链接


《操作系统真象还原》从零开始自制操作系统 全章节博客链接


相关查阅博客链接


Linux下exec函数详解


本书中错误勘误


函数sys_execv我找了半天没有找到TASK_NAME_LEN的定义
我认为这个就是用strlen得出来的 需要补充上去


部分缩写熟知


EHDR Elf HeaderElf头
PHDR Programme Header 程序头表


实现exec的思路与启发


这里看到了elf头 说实话 其实挺害怕的 没想到在操作系统编写路上的最后一篇 又遇到了差点劝退我的elf头 我现在都能想到 梦回第五六章 由汇编转到0xc0001500main.c 那个地方我不知道调试了多少天 一个周末的时间可能都在调试那里了 希望在这一章不要因为elf头 编译器的问题导致不能实现了 希望上天看到我都是最后一篇的份上 让我快一点开心一点的把三节写了吧

对了 话说今天是七夕了 哈哈 已经八月十四号了
现在上大学之后 作为IT人 我还坐在家里的桌子上 一张桌子 一把椅子 一瓶水 一堆面包 哈哈 坚持着把操作系统写完

希望吧 在明年的这个时候 我能够心想事成 原来做的承诺一定要做到 原来许下的祈愿也一定要实现 对于喜欢不喜欢这个事情 哈哈 一切都看缘分吧
IT人还是要多多做做事情 哈哈 不说那么多话了 各位往下看吧

当然作为最后一章节了 想着以后也不再写一个了 最后一章基本上一行一个注释 绝大地方我都给了代码解释 哈哈 就当快离别了给各位看官的小礼物 哈哈哈哈

wow 刚刚忽然醒悟了一下 哈哈 虽然今天是七夕的凌晨的两点钟 但是我还在这里编辑博客 大家就当是困倦人发出的自我感慨吧 哈哈

这里的思路 我刚刚看书忽然看到的一点 本来就是新进程替换旧进程
然后我们通过解析文件头 把程序放进去即可

但是我在内存上面心想 我们万一把其他进程的内存占用了怎么办 哈哈 我看到书上写了一句话 由于用的是同一个页表 对哈 同一个页表!
用的同一个页表的话 换了进程 但是我们没换页表 只要页表上那一项存在 我们直接用就行了 因为那是旧进程分配好的 对于没分配好的我们现分配即可

对于一些地方我还是觉得挺有意义的 原谅我在这里多说两句
我想起来什么说什么

1、程序的分布布局头部 在下面我贴的图那里很清楚 大家可以不用看书 直接看下面那张图就懂了
2、对于程序头表中的我们怎么遍历 因为头表每一项的大小固定 故我们找到第一项 所有项都自然而然找到了 找到第一项 则第二项的位置为第一项+程序头表项的大小 就找到第二项了
3、我们参数调用 eax一般作返回值 ebx做第一个参数 ecx做第二个参数 edx做第三个参数 我们操作系统的系统调用仅限于三个参数的函数调用 了解这些足够应付了 哈哈 但是还是挺实用的
4、在0级内核态直接跳转到3级用户态 我们在操作系统中频繁地使用intr_exit通过把esp eip ebx ecx提前放到中断栈中 通过一系列pop即可把我们的信息放进去 我们再提前把程序段在相对应的内存位置铺设好 就ok啦
5、当然进入用户态 再进入内核态 我们操作系统仅做了 内核陷入 cpu提供的中断方法才得以进入


哈哈 太好了 大家也不用太担心程序头表和Elf头 为了大家把解析头文件看的更清楚一点 我还专门去在终端解析了一下 截下来下面这张图 我觉得布局和解析应该就相当清晰了 这里就当是随笔了哈哈 大家看着乐


遗憾告终


当各位看到这个地方的时候 其实我真的很失落很失落
因为写这段话的时候 我差不多调试exec 已经调试了一天了 中午不怎么吃得下饭 晚上吃饭的时候还在想 最后刚刚看到已经12点钟了 于是就打算放弃了
我基本上把绝大部分代码重新一点点看过 内存管理 锁同步 文件管理 但是到最后就是会因为缺页而导致错误
因为我是一个比较喜欢善始善终的人 如果做的话 就一定要做完 如果实在没办法完成了 就不再做下去了 既然这里没有完成 后面的waitexit 和管道就不实现了

说实话 这段时间真的还是挺累了 为了做操作系统 这段时间一直感觉身上有个无形的担子压在身上 一般做着做操作系统 看书+写代码+debug+写博客 写完一章其实要花差不多两到三天的时间 而且我是属于不做完事情不想吃饭休息的那种 所以一般一做事情就停不下来 耍的话也是一样

我本来还是想把这本《操作系统真象还原》全部实现出来 哈哈 到最后看样子也没有办法实现最后的那么一点了 挺遗憾的 做了那么多天 最后倒在了最后的三小节


但是啊 我细数了一下 我从写系列博客以来 我发现一直都有很多很多的遗憾

现在都能记得 我一个月就学完了c语言 并想实现一个贪吃蛇小游戏 最后实现是实现了 但是最后想实现一个回溯功能 一直出现小问题 最后就放弃了这个计划

紧接着就是学习浙大的数据结构慕课 我记忆特别清楚 因为对于一个没有接触过数据结构的人来说 去直接看数据结构刷浙大的题是真的很困难 但是那个时候感觉没有什么人真的做了题目整理 从那个时候开始我就开始有了 什么东西都做系列博客的习惯了 那个时候啊 我现在都还能记着 有的时候做一道题就是一两天 一直盯着那几道题目看 刚开始的时候啊 真的是无从下笔 但是越到后面 越痛苦越收获了很多 到后面基本上很多题都是按照自己的思路一道道做出来了

大概也是花了一个月多一点的时间 那个时候就把浙大慕课的数据结构题给全部整理做完了 哈哈 那个时候做完的时候还是挺喜悦和骄傲的 因为确实那些题目的难度真的挺大的

但是就是正着那股劲 我又开始了刷力扣的道路了 那个时候又开始了新的挑战 又开始了真的每天都是度日如年的日子 因为刚开始刷题的时候 发现自己什么都不会 也是在折磨和痛苦中 度过了很久 那个时候就保持每天上午有时间刷三道题的生活了

然后就是觉得自己底层知识一点都不知道 就开始看汇编原理 在大概看完王爽的汇编之后 就毅然决然的购买了大名鼎鼎的CSAPP 哈哈 那个时候自己还是挺年轻气盛的 拿着就直接开始看了 当然 真的收获还是很多 因为发现原来计算机底层有这么多知识 而且那个时候就觉得自己对计算机的知识远远不够 就开始大量买书

当然看到最后 发现自己很难再继续看下去了 就开始学C++了 但幸好 哈哈 学C++的路上 发现了北大的C++慕课 哈哈哈 真的现在想起那位老师 尽管记不得名字了 我现在去搜一下 哈哈 找到了 是郭炜老师
我现在对他的C++课程都印象非常非常深刻 但首先 我学C++的原因是想走后端 当然现在自己后端的知识一点点都没有接触… 只能之后再花时间学习了 然后听说C++是编程语言中比较难的 很难学懂 但事实上是这样子的

我还是有一段时间没有刷题了 最近一直在做这个操作系统 白天都没有时间刷 C++我现在用起来 其实就是STL+C语言 哈哈 真的是这样子的 很多C++的特性 非常厉害的地方我都没有用到 甚至接触到 C++之后反正我还会花时间去学习的 然后就是看完慕课 边刷题边看 最后把C++的题目给全部总结了出来 还是挺好的 这种总结题目成为专题博客的感觉还是相当不错的 哈哈

然后自己觉得C++只是摸入了门槛 然后就去看C++ Primer 其实里面很多东西都不是很看得懂 刚开始真的很尽力的每一页书都去看 到最后由于自己真的还是看的心力憔悴和不想继续看下去了 到最后的一点点很难的内容就没有看了 就这样囫囵吞枣似的看完了一本书

接着我就在想 自己的算法 是不是得再加固一下 毕竟数据结构也已经学了很久了 好久都没有碰了 刷力扣又不是全部的数据结构知识 于是就去买了橙皮L《算法》第四版 接着就像我的博客置顶 哈哈 里面就有算法第四版C++语言实现 其实这本书就是数据结构加强版 还是顺带复习了很多算法 说实话 Frankly Speaking 很多算法我也会忘记 就像之前我总是有意识无意识的复习自己的KMP匹配算法 但是复习到现在可能做了相关三四道题了 很多小细节的地方还是会写错 所以还是得很多时候去复习复习

把算法第四版给看完了 哦 对了都忘了自己学过Python了 哈哈 大一下开始我其实啥都没干 因为我们学校新增了Python课程 大概我从零开始学python到后面基本能秒杀python题目就花了一周的时间左右 我花了差不多一周的时间 总结完了浙大Python慕课题目集 但是那个时候我觉得都花时间学了脚本语言了 不如自己再做两三个有意思的小爬虫 之后又去学习了北理的爬虫课程 还是花了差不多五天多 学习完了做了三个爬虫 哈哈 那个时候还是觉得多有意思的 其实那个时候我更想学习专业的框架级爬虫语言 我记得好像是北邮有那个课 但是我在网上搜罗了很久的资源 一直没有办法得以找到课程 好不容易在学堂在线里面找到了 结果发现下架了 现在想想还是觉得挺可惜的

话转回来 哈哈 其实说了一大堆 做的事情也没几件 之后我记得看完橙书 我就想着要花时间学底层了 就想着先学操作系统吧
于是就去淘宝买了《现代操作系统》 到了之后就慢慢悠悠的开始看了 那个时候真的觉得操作系统真的好困难啊 我还是学习了CSAPP大部分的章节 + 学习了汇编 很多底层我多少都还是知道很多 怎么这么抽象啊
在看书的时候 我在很尽力的想象 想象进程是怎么切换的 想象内存是怎么分配的 内核态 用户态 进程 线程 进程间的切换 用户栈 分页 一大堆一大堆 哈哈 写了那么多 我写的那么多章节的内容仿佛在播放电影一样的在我眼前飘动

反正那个时候很多时候我都在尝试说服自己 这个东西是怎么样的 这个东西就是这样的 当我读到第六章读完的时候 我实在是受不了了
操作系统看书 真的看不懂 在我迷茫与彷徨的时候 我看到了网易云哈工大操作系统网课 那个时候感觉操作系统又点亮了起来

写那个操作系统Lab的时间是难熬的 我是一个喜欢要不就不做 要不就做好的一个人 说实话 其实还是多少有点收获的 原来很抽象的东西具象化了很多 但是我现在还是很感谢 哈工大的李治军老师 说的一句话 我到现在都一直记着
纸上得来终觉浅 绝知此事要躬行

我写完了第一个Lab的时候 我就下决心写完所有的Lab 并也做一个系列博客总结 我现在是记得 做最后是做完了 收获也还是不少 但是做那种Lab的感觉就是搁着一层纱摸东西的感觉 确实很多东西具象化了 但还是感觉有点朦朦胧胧的

到最后我毅然决然的 那天写完的晚上 在去食堂吃饭的路上 打算自己一定要实现一个操作系统 不自己敲代码 不自己一步步调试 怎么可能学的好操作系统 自己怎么能够搞得懂
于是就有了这十五章的博客 于是就有了我现在写的这些话


哈哈 我是一个比较喜欢回忆往事的人 请各位读者不要介意
想到这些 不知不觉 现在已经是第二天的凌晨1:30了 待会还得把总结系列博客的链接发出来 目前完成百分之九十七 九十八的操作系统全代码发出来 明天看自己给自己放不放个假吧 哈哈

这两天到时候去鼓捣鼓捣Github 到时候把代码弄到Github上面 如果大家想看一下代码 或者想调试的话 比较方便下载嘛 那就先写到这里 哈哈
感觉现在浑身的压力都少了好多 IT人真的挺累的 哈哈 各位不要熬夜!

《操作系统真象还原》第十五章 ---- 实现系统交互 操作系统最终章 四十五天的不易与坚持终完结撒花 (下)(遗憾告终)相关推荐

  1. 《操作系统真象还原》第十五章 ---- 实现系统交互 操作系统最终章 四十五天的不易与坚持终完结撒花(上)

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 闲聊时刻 实现fork 实现fork的介绍 实现fork的原理 编写完的thread.c(fork_pid) 编写完的thread.h(str ...

  2. 《操作系统真象还原》第七章

    <操作系统真象还原>第七章 本篇对应书籍第七章的内容 本篇内容介绍了操作系统的中断处理机制,建立中断描述符表,填充门描述符,以及中断处理程序,初始化8259A中断控制器实现外部中断功能,控 ...

  3. 《操作系统真象还原》第十三章 ---- 编写硬盘驱动软件 行百里者半九十终成时喜悦溢于言表

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 闲聊时刻 提前需要准备编写的函数 实现printk 实现sprintf函数 创建从盘 创建从盘的步骤 修改后的bochsrc.d ...

  4. 《操作系统真象还原》第六章 ---- 开启c语言编写函数时代 首挑打印函数小试牛刀 费心讨力重回gcc降级 终尝多日调试之喜悦

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 修改代码的小闲聊 编写print.S(实现打印函数) print.S代码 print.h代码和stdint.h代码 修改main ...

  5. 操作系统真象还原_第零章_解惑

    第零章 解惑 1.操作系统是什么? 类比一 古代部落害怕手下的人滥用武器伤害他人,所以制造武器是要向部落申请.而人们只有申请的资格,申请结果有部落决定. 设计操作系统的人害怕使用者滥用硬件(例如把操作 ...

  6. 操作系统真象还原第1.5章 NASM汇编学习

    第二章有使用 NASM 汇编写主引导记录 MBR 的内容. 在写第二章的代码前,每天晚上下班后花一些时间简单地回顾了 NASM 汇编的内容,只复习了最简单的语法,之后写 OS 时再边写边查资料. 指令 ...

  7. 【操作系统真象还原】第4章:保护模式入门(4.4~4.5节)

    目录 4.4 处理器微架构简介 4.4.1 流水线 4.4.2 乱序执行 4.4.3 缓存 4.4.4 分支预测 4.5 使用远跳转指令清空流水线,更新段描述符缓冲寄存器 4.6 保护模式之内存段的保 ...

  8. 《操作系统真象还原》第4章 保护模式入门 ing... 持续更新

    目录 文章目录 目录 概述 初见保护模式 代码 32push.S 全局描述符表 段描述符 GDT.LDT及选择子 GDT 选择子正式介绍 LDT 打开A20地址线 保护模式的开关,CR0寄存器的 PE ...

  9. 《操作系统真象还原》从零开始自制操作系统 全流程记录

    文章目录 前引 章节博客链接 实现源码链接 前引 这本<操作系统真象还原>里面一共有十五个章节 大约760页 这些系列博客也是我在做完哈工大操作系统Lab之后 觉得还是有些朦朦胧胧 毅然决 ...

最新文章

  1. python学习笔记——Thread常用方法
  2. 【LeetCode】【数组归并】Merge k Sorted Lists
  3. 怎么安装python3.6.2_centos7.2下安装python3.6.2
  4. 第四范式团队KDD Cup世界冠军方案详解:解密共享出行场景中的优化问题
  5. 计算机应用基础中专教材pdf,中等职业教育通用教材-计算机应用基础.pdf
  6. 双向a*搜索算法_双向搜索算法
  7. hp380g5 安装linux7,hp 380G5 安装centos 7
  8. vuecli+axios的post请求传递参数异常
  9. 调用支付jsapi缺少参数package怎么解决_干货:如何借助小程序云开发实现小程序支付功能(含源码)...
  10. Atitit 快速开发的推荐技术标准化 规范 大原则
  11. Open Robotics 十周年(2012-2022)
  12. jquery获取验证码按钮倒计时
  13. Python语言程序设计基础_期末作品设计_答案_通识教育必修课程_上海师范大学
  14. 俄罗斯方块Tetris(C基础,Linux终端)
  15. EXCEL成绩分出优秀及格与不及格
  16. 腾讯云轻量服务器Centos 7.6安装redis 5.0.4教程
  17. 2022/11/21-11/26周报
  18. 如何排查JVM内存占用过高
  19. 编译小米2s CyanogenMod 版本遇到的几个问题 (02.26更新)
  20. 核查清单-小程序分享功能

热门文章

  1. 深度学习 客流统计 人流计数
  2. 业界首家720p/1080p移动端实时超分,打造抖音极致画质体验
  3. 新近手机测试工具速递
  4. android彩信数据字段
  5. 关于在计算机同学之间建立社区讨论氛围的疑惑
  6. prism 搭建prism项目
  7. 如何用W7100A实现串口转以太网
  8. 010 Editor算法逆向与编写注册机
  9. 【mysql】-【innodb数据存储结构】
  10. 2.03.05 原型与原型链