文章分类 - 《操作系统真象还原》
摘要:15.5加载用户进程 “ exec会把一个可执行文件的的绝对路径作为参数,把当前正在运行的用户进程的进程体(代码段、数据段、堆、栈)用该可执行文件的进程体替换,从而实现了新进程的执行。 有了exec,用户便可以完成任意外部命令(用户进程)的运行。 执行外部命令时bash才会fork出子进程并调用ex
阅读全文
摘要:终于到最后一章了,行百里者半九十,本周搞定它! 15.1 fork的实现与原理 “ fork之后,由之前的一个进程变成了两个进程,也就是说内存中多了一个进程,进程拥有独立的地址空间,因此两个进程执行的是独立且相同的代码,也就是两套代码。 子进程是在fork函数返回之后才开始执行的,因此执行的是for
阅读全文
摘要:本篇博客对应书本14.11~14.15节 步骤: 1.创建目录 2.遍历目录 3.删除目录 4.任务的工作目录 5.获得文件属性 1.创建目录 ①fs/fs.c,新增sys_mkdir()函数: 1 /* 创建目录pathname,成功返回0,失败返回-1 */ 2 int32_t sys_mkdi
阅读全文
摘要:本篇博客对应书本14.4~14.10节 步骤: 1.文件操作相关的基础函数 2.创建文件 3.文件打开与关闭 4.实现文件写入 5.读取文件 6.实现文件读写指针定位功能 7.实现文件删除功能 1.文件操作相关的基础函数+2.创建文件 几乎涉及fs/下的全部文件: ①fs/fs.h: 1 #ifnd
阅读全文
摘要:第14章文件系统大概是本书中最麻烦的一章了,不是说它难,更多的是说它代码(又臭又)长,光看篇幅就知道了——100页呢。不过好在我觉得自己学习xv6时对于文件系统还是有仔细研究的,希望能有所助益。当然,为避免冗长,本章也将分为若干个博客进行记录。 本篇博客对应书中14.1~14.3节。 下面是我认为值
阅读全文
摘要:感觉本章比较“硬”,说实话我个人对这部分也不是很感兴趣,就直接把整个实验步骤搬上来吧。 步骤: 1.创建从盘 2.创建磁盘分区表 3.编写硬盘驱动程序 1.创建从盘 hd60M.img是主盘,只充当了启动盘的作用,仅用来存储内核。我们再创建一个80MB的硬盘作为从盘来安装文件系统。 ①在bochs/
阅读全文
摘要:步骤: 1.系统调用的实现 2.让用户进程“说话” 3.完善堆内存管理 1.系统调用的实现 ①修改kernel/interruput.c,其实就是修改一下常量IDT_DESC_CNT和idt_desc_init()函数: 1 #define IDT_DESC_CNT 0x81 // 目前总共支持的中
阅读全文
摘要:引言——因为一个bug本篇文章难产,我一度以为整个项目要夭折了,但功夫不负有心人,还是诞生了它。 “ 当加载新任务时,CPU自动把当前任务(旧任务)的状态存入当前任务的TSS,然后将新任务TSS中的数据载入到对应的寄存器中,这就实现了任务切换。TSS就是任务的代表,CPU用不同的TSS区分不同的任务
阅读全文
摘要:重复一些概念: “ 公共资源 可以是公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源。 临界区 临界区是指程序中那些访问公共资源的指令代码,即临界区是指令,并不是受访的静态资源。 互斥 互斥也可称为排他,是指某一时刻公共资源只能被1个任务独享,即不允许多个任务同时出现在字节的临界区中。
阅读全文
摘要:感觉本章所涉及的进程与线程的相关知识是我在学习xv6时学的最薄弱、也是最难搞的一部分,因为里面涉及大量出入栈和栈的变换操作。我觉得栈是OS中的核心,弄懂了栈OS也就手到擒来了。 正如书中所说,“有些陌生的内容需要量变才能到质变”,特将部分内容抄录如下以加深自己的印象。 “ 1.实现内核线程 线程和进
阅读全文
摘要:步骤: 1.实现assert断言 2.实现字符串操作函数 3.位图bitmap函数的实现 4.内存管理系统 1.实现assert断言 实现开关中断: 在interrupt.c的第14行添加: 在interrupt.c的末尾添加: 1 /* 开中断并返回开中断前的状态 */ 2 enum intr_s
阅读全文
摘要:“ 1.中断分类 把中断按事件来源分类,来自CPU外部的中断就称为外部中断,来自CPU内部的中断称为内部中断。外部中断按是否导致宕机来划分,可分为可屏蔽中断和不可屏蔽中断两种,而内部中断按中断是否正常来划分,可分为软中断和异常。 CPU根据此中断向量号在中断向量表或中断描述符表中检索对应的中断处理程
阅读全文
摘要:函数调用过程(cdecl调用约定): 以下面这段代码为例: 步骤: 0.转移文件 1.浅析C库函数与系统调用 2.实现打印函数 0.转移文件 感觉将这么多与系统启动有关的文件放在bochs下确实不太好看,于是决定mkdir boot,将以下四个文件放进去: 于是bochs下的文件还剩下: 有没有感觉
阅读全文
摘要:预告一下,本章很难啃,分页机制复杂,且到了最后随着内核代码的扩张很容易在调试过程中迷失,所以要格外仔细。 本章内容较多,大家看书本吧,就不把内容再抄录一遍了。 但还是要放几张图片: 步骤: 1.获取物理内存容量 2.启动分页机制 3.加载内核 1.获取物理内存容量 直接上手修改loader.S: 注
阅读全文
摘要:说实话,这大概已经是我第四遍看实模式、保护模式的相关内容了,xv6确实是个好东西,那其中的代码与书中示例的思想和结构非常相似,所以我理解书中的这些代码也并没有感到很吃力。但常读常新,还是颇有收获的: 1. 保护模式在 Intel 80286 CPU 中首次出现。 实模式缺点: “ ①实模式下操作系统
阅读全文
摘要:本章内容多为汇编语言和硬件的相关知识,就不一一抄录了。但是在此处本系统和xv6有一点不同,xv6会将MBR和Bootloader合并为bootblock程序(由bootasm.S和bootmain.c编译链接而成),而本系统是分开的。因此记录一下MBR和Bootloader的作用: “我们的MBR受
阅读全文
摘要:本章实验较为简单,主要是概念性的理解,我在学习xv6时基本都有所涉猎。 下面将我认为重要的知识点总结如下: 1.实模式下的1MB内存布局 下面这张图在后续的学习中应该会经常用到,务必熟悉。 “内存地址0~0x9FFFF的空间范围是640KB,这片地址对应到了DRAM,也就是插在主板上的内存条。” “
阅读全文
摘要:这是本人第一次尝试写一个操作系统,参考书籍为《操作系统真象还原》。欲作博客,以享自我。 前期基础(非必要): 基本的linux命令 哈工大OS课程+lab xv6源码分析+lab(参考书籍:《操作系统原型》(罗秋明)) 《汇编语言》(王爽) 《x86汇编语言:从实模式到保护模式》 《程序员的自我修养
阅读全文
浙公网安备 33010602011771号