
操作系统
文章平均质量分 91
小小OS却拥有大大的能量,是什么赋予了它强大的能力?吾抱着对未知答案的渴望,踏上探索操作系统的旅程,随着 Kernel、中断、进程、文件系统、内存管理等重重迷雾被揭秘,OS对吾不再是“黑盒子”,至少我开始慢慢了解我的“伙伴”,以及理解它背后的“不容易”...
小灵不想卷
过去当做回忆,往事埋在心底,努力拥抱未来。
展开
-
《操作系统-真象还原》阅读总结/遗憾离场/加倍努力 出人头地
喜洋洋与灰太狼》好好看 😋!说起来,在学校学习挺心累的…,在学校的琐事太多,时间一点都不连续,哎,可是又不得不服从这规则,期间还因为旷课写了一篇1K字保证书,抄了我1小时,艹这本书是我的第二本操作系统书籍,之前看了《Orange’s一个操作系统的实现》2009 年出的,而这《操作系统-真象还原》这本是 2016 年出的,不得不说确实是有点旧了…但读下来还是学到了非常多的东西,受益良多呀,哈哈。这本书共759页,于2023年1月7日阅读至727页,余32页无期 😤!原创 2023-01-07 22:01:03 · 1538 阅读 · 5 评论 -
《操作系统-真象还原》15. 系统交互
pid_t 是一个宏定义,其实质是int 被定义在中。返回值: 若成功调用一次则返回两个值,其返回值的意义如下0:子进程子进程ID,即 >0:父进程-1:错误fork 的另一个特性是所有由父进程打开的描述符都被复制到子进程中。父、子进程中相同编号的文件描述符在内核中指向同一个file结构体,也就是说,file结构体的引用计数要增加。(相关函数请看fork 的实现 -> 思路sleep(5);\n");return 1;sleep(5);return 0;} else {原创 2023-01-07 21:26:44 · 1006 阅读 · 0 评论 -
《操作系统-真象还原》14. 文件系统
文件系统是对文件的管理方案。硬盘是低速设备,其读写单位是扇区,为了避免频繁访问硬盘,操作系统不会有了一扇区数据就去读写一次磁盘,往往等数据积攒到足够大时,在一次性访问硬盘,那么到底是多大呢?我们以“块”为单位,一个块可能 4K 或 32K 等。硬盘读写单位是扇区,一次一个块是由多个扇区组成,块大小是扇区的整数倍。块是文件系统的读写单位,因此一个文件可能被分成多个块进行存储。FAT 文件系统的文件链式组织结构:缺点:当需要访问文件中的某一块时,需要从头开始遍历。另一种文件组织结构:UINX 操作系统中的索引结原创 2023-01-02 20:41:44 · 983 阅读 · 0 评论 -
硬盘 / 硬盘控制器主要端口寄存器 / Controller Register
一个主板支持这样的 4 块 IDE(PATA)硬盘,所以主板提供应两个 IDE 插槽。也将 IDE0 称为 Primary 通道,将 IDE1 称为 Secondary 通道,它们都是通道。很久以前,硬盘控制器和硬盘是分开的,后面开发了一个新接口,这才将硬盘控制器和硬盘整合到一起,这样接口称为集成设备电路(Integrated Drive Electronices, IDE)。Tips:也有可能只有一个 IDE 插槽,甚至不支持 IDE 插槽,这样就要看主板能力了。作用:保存硬盘的状态信息。原创 2022-12-23 16:52:38 · 2777 阅读 · 0 评论 -
《操作系统-真象还原》12. 进一步完善内核
内存的使用情况是通过位图来管理的,因此,无论内存的分配或释放,本质上都是在设置相关位图中的相应位。分配内存:在虚拟地址内存池中寻找可用虚拟地址,相关函数为 vaddr_get。操作的位图:kernel_vaddr.vaddr_bitmap 或 pcb->userprog_vaddr.vaddr_bitmap。在物理内存池中寻找可分配的物理地址,相关函数为 palloc。操作的位图:kernel_pool->pool_bitmap 或 user_pool->pool_bitmap。原创 2022-11-20 10:24:42 · 993 阅读 · 0 评论 -
《操作系统-真象还原》11. 用户进程
中断发生时,处理器要把 NT 和 TF 位置为 0,若对应的描述符是中断描述符,还要再将标志寄存器中的 IF 位置为 0,这是为了避免中断嵌套,防止正在处理的中断尚未完成时,相同的中断源又发出中断信号,避免引发 GP 异常。答:因为旧任务并没有执行完,它现在执行的新任务也只是因为要完成某些必要的工作,才不得不调用新任务,新任务完成后就会立刻回去执行旧任务,因此旧任务的 B = 1,不需要修改。在用户进程 4GB 的虚拟地址空间的高 3GB 以上划分给操作系统,0~3GB 划分给用户进程自己。原创 2022-11-14 19:56:06 · 877 阅读 · 0 评论 -
《操作系统-真象还原》10. 输入输出系统
可以是公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源。访问公共资源的代码区域,临界区的代码只允许一个线程访问。互斥:任意时刻访问公共资源只允许一个线程访问,即任意时刻访问公共资源的临界区代码中只允许被一个线程所执行。竞争条件:竞争条件指多个线程或者进程在读写一个共享数据时,结果依赖于它们执行的相对时间的情形。原创 2022-11-06 21:51:46 · 772 阅读 · 0 评论 -
《操作系统-真象还原》09. 线程
线程在用户空间实现和内核空间实现相比,只是内部调度时少了陷入内核的代价,这里确实提速了,但由于整个进程的时间片是有限的,在有限的时间下,还需要将时间分配给进程中的线程,因此每个线程执行时间都非常非常短暂,再加上进程内的线程调度器维护线程表、运行调度算法的时间片消耗,反而还抵消了内部调度所带来的提速。进程拥有整个地址空间,即是资源的所有者,而线程没有自己的地址空间,线程依赖于进程的地址空间,也就是说线程依赖于进程中的资源,因此线程被称为轻量级进程。原创 2022-11-04 12:32:29 · 801 阅读 · 0 评论 -
《操作系统-真象还原》08. 内存管理系统
位图,广泛应用于资源管理,是一种管理资源的方式、手段。资源包括很多,例如内存或硬盘,,对于此类大容量资源的管理一般都会采用位图的方式。位指的是 Bit,1 字节为 8 个 Bit,每个 Bit 对应一个资源,也就是说资源和 Bit 是一对一的关系。既然位图本质就是一串二进制位,那对于它的实现,用字节数组比较方便,数组中每个元素都是一个字节,每个字节八个位,每个位对应一个资源,即一个字节表示 8 个资源单位。本书中,位图中的每一位都将表示实际物理内存中的 4KB,即一页。原创 2022-10-24 12:03:29 · 1039 阅读 · 0 评论 -
《操作系统-真象还原》07. 中断
信号/寄存器名说明INT8259A 选出优先级最高的中断请求后,发信号通知 CPU。中断响应信号响应来自 8259A 的请求信号。中断屏蔽寄存器宽度 8 位,用来屏蔽某个外设的中断。中断请求寄存器宽度 8 位,作用是接受经过 IMR 寄存器过滤后的中断信号并锁存,此寄存器中全是等待处理的中断。优先级仲裁器当有多个中断同时发生,或当有新的中断请求进来时,将它与当前正在处理的中断进行比较,找出优先级更高的中断。中断服务寄存器宽度 8 位,当某个中断正在处理时,保存在此寄存器中。原创 2022-10-23 10:14:56 · 818 阅读 · 0 评论 -
《操作系统-真象还原》06. 完善内核
序号占位符是对在 output 和 input 中的操作数,按照它们从左到右出现的次序从 0 开始编号,一直到 9,也就是说最多支持 10 个序号占位符。基本内联汇编的局限性:在基本内联汇编中,若要引用 C 变量,只能将其定义为全局变量。寄存器间接寻址:(offset_address),只能用通用寄存器存储 offset_address,存储的内容为地址。参数,使用该参数编译时,GCC 会按照自己的意图优化代码,可能会因此修改了自己写的代码。:作为汇编代码的输出,这样 C 才可以访问汇编的数据。原创 2022-10-22 12:06:17 · 731 阅读 · 0 评论 -
《Orange‘s 一个操作系统的实现》第八章
《Orange‘s 一个操作系统的实现》第八章。原创 2022-09-12 08:41:08 · 312 阅读 · 0 评论 -
《Orange‘s 一个操作系统的实现》第七章
的文本模式,该模式显存大小为 32KB,占用范围 0xB8000 ~ 0xBFFFF,每 2 字节代表一个字符,其中低 8 位为 ASCII 码,高 8 位位字符属性。指的是 TTY 进程,不是说每个 TTY 的任务(要执行的工作),该函数的作用是轮询每个 TTY,对每个 TTY 都进程初始化,以及完成对键盘缓冲区的读取和字符显示,这些才是 TTY 的工作。在键盘中存在一枚叫做键盘编码器的芯片,它通常是 Intel 8048 以及兼容芯片,作用是监视键盘的输入,并把适当的数据传送给计算机。原创 2022-09-11 12:31:27 · 1230 阅读 · 0 评论 -
《Orange‘s 一个操作系统的实现》第六章
一个进程只要有一个进程体和堆栈就可以运行了,因为多个进程要同时运行,所以进程体和堆栈的位置管理变成了问题,这里我们定义一个数组task_table来管理一个任务(即进程)的开始地址、堆栈等。// 进程的所有寄存器都保存在 STACK_FRAME 结构中 u16 ldt_sel;// 局部描述符 LDT u32 pid;// 进程ID char p_name [ 16 ];// 进程名 } PROCESS;// 进程体的函数指针 int stacksize;原创 2022-09-10 08:10:23 · 1434 阅读 · 0 评论 -
《Orange‘s 一个操作系统的实现》第五章
在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的文件格式。原创 2022-09-09 10:26:18 · 1053 阅读 · 0 评论 -
《Orange‘s 一个操作系统的实现》第四章
因为引导扇区需要有 BPB 等头信息才能被微软识别,因此开头需要添加 BPB 等头信息。其次是需要将 Loader 载入内存,需要读取软盘,可通过int 13h中断来实现,因为需要频繁使用,因此封装函数为ReadSector。在根目录区中遍历所有条目,找到与 Loader 文件名相同的条目。找到对应条目后,需要通过 FAT 表读取该文件,通过扇区号(簇号)求 FAT 的功能需要封装一个函数。原创 2022-09-08 13:22:19 · 991 阅读 · 0 评论 -
《Orange‘s 一个操作系统的实现》第二章
dd 指令(window) http://www.chrysocome.net/downloads/dd-0.6beta3.zip。安装完成后,需要配置环境变量。原创 2022-09-08 13:17:08 · 580 阅读 · 0 评论