tityos
文章平均质量分 54
操作系统真相还原总结
mei_you_n
这个作者很懒,什么都没留下…
展开
-
实验28.文件删除 sys_unlink
实验 28. 文件删除 sys_unlink1 删除目录项,2 释放 inode 的数据块和 inode 结构体。原创 2024-08-12 18:31:35 · 263 阅读 · 0 评论 -
实验27.fwrite,fread,fseek
实验 27. fwrite,fread,fseek1.确保 inode 的数据块有那么多空间,如果没有就扩容。2.把数据写入文件的数据块。读出 inode 的所有数据块偏移,然后在数据块中读出数据。修改 file 结构体的 fd_pos 即可。原创 2024-08-12 16:39:54 · 443 阅读 · 0 评论 -
实验26.文件的打开和关闭
【代码】实验26.文件的打开和关闭。原创 2024-08-09 15:24:51 · 302 阅读 · 0 评论 -
实验25.创建文件
实验 25. 创建文件i_no 就是 inode 号i_sectors 是块地址数组,表示这个文件的内容是那些块构成的.如果是文件,那么块的内容是文件的内容如果是目录,那么这些块的内容是一个个目录项。原创 2024-08-09 00:08:38 · 508 阅读 · 0 评论 -
实验24.创建并挂载文件系统
实验 24. 创建并挂载文件系统创建件系统: 初始化每一个分区的结构,把扇区划分为超级块,扇区位图,inode 位图,inode 表,根目录,空闲扇区挂载分区: 创建一个分区结构体,在内存中存放要挂在的分区的超级块、扇区位图、inode 位图。原创 2024-08-06 21:17:24 · 430 阅读 · 0 评论 -
实验23.硬盘分区,并编写硬盘驱动程序
已完成实验已完成实验链接简介实验 22. 硬盘分区,并编写硬盘驱动程序总结创建硬盘并分区加载硬盘分区实现 printk使能硬盘中断 interrupt.cidel 线程,主线程阻塞后此线程保底 thread.csleep 函数 timer.c加载分区信息 ide.c创建硬盘fdisk /home/c/os/bochs/hd80M.img# 1.设置柱面和磁头mxmc162h16r# 创建主分区np1204833原创 2024-08-06 18:05:12 · 810 阅读 · 0 评论 -
实验22.堆内存管理
实验 22. 堆内存管理用户的内存块描述数组在 pcb 中定义了内存块描述数组,描述符的链表里放着申请了但是没有使用的内存块申请 size 大小的内存时,本质申请到的是 sizeof(arena) + size(假设叫 buffer) 的长度若 size>1024, 那么 arena 把 buffer 当成一个内存块,直接返回 buffer 的首地址若 size<1024,那么 arena 把 buffer 分成 n 份内存块,把每一个内存块记录在描述符的链表中。原创 2024-08-02 17:17:46 · 823 阅读 · 0 评论 -
实验21.实现 printf
实验 21. 实现 printf简化系统调用和中断,用 eax 代表调用号参数,ebx,ecx,edx 来代表参数(syscall.c kernel.s)添加 write 的系统调用接口(syscall.c, syscall-init.c, print.s)注意:要更改 print.s 中清屏的地址添加 printf 函数接口。原创 2024-08-01 18:13:26 · 553 阅读 · 0 评论 -
实验20.实现系统调用
实验 20. 实现系统调用进程结构体新增 pid 成员变量pid 采用静态全局变量,锁控制+1,确保唯一进程初始化是就分配好 pid添加 getpid,本质调用 syscall,参数入栈,再执行 int 0x80添加 0x80 中断,根据参数 0 调用系统调用函数表的函数初始化系统调用函数表,表项 0 就是获取 pid。原创 2024-08-01 11:42:06 · 433 阅读 · 0 评论 -
实验 19. 用户进程
实验 19. 用户进程main函数创造了1个主线程,两个内核线程,两个用户进程。共5个PCB,进程PCB->pgdir为进程自己的页表首虚拟地址,线程为null。因此本次实验是五个进/线程在来回切换。他们切换的方式无疑都是利用自己PCB->kstack保存切换前esp,然后不断pop完成cs:eip的跳转。原创 2024-07-31 22:26:09 · 377 阅读 · 0 评论 -
实验18.环形缓冲区
实验 18. 环形缓冲区1.生产者消费者问题。原创 2024-07-30 14:16:11 · 223 阅读 · 0 评论 -
实验17.实现键盘输入
实验 16. 实现键盘输入1.注册键盘中断,2.中断函数读取键盘端口,做按键判断,打印。原创 2024-07-30 11:42:28 · 410 阅读 · 0 评论 -
实验16.用锁实现终端输出
实验 15.用锁实现终端输出注意:gcc一定不能用11.4,换成书上环境,我是用的4.4.7能过正确。使用gcc11一直错误,怀疑人生了都。原创 2024-07-29 21:29:46 · 497 阅读 · 0 评论 -
实验15.多线程调度
实验.多线程调度。原创 2024-07-25 18:27:51 · 815 阅读 · 0 评论 -
实验14.实现内核线程
实验.实现内核线程。原创 2024-07-24 11:01:36 · 278 阅读 · 0 评论 -
实验13.内存管理系统
实验:内存管理系统。原创 2024-07-23 22:13:40 · 444 阅读 · 0 评论 -
实验12.实现断言
实验.assert 断言函数。原创 2024-07-23 11:34:33 · 146 阅读 · 0 评论 -
实验11.实现中断处理 2
实验.实现中断处理, 在kernel.s中的中断服务程序中调用在interrupt.c定义的中断函数,并调快时钟。原创 2024-07-23 00:35:44 · 348 阅读 · 0 评论 -
实验10.实现中断处理
实验.实现中断处理。原创 2024-07-22 14:59:27 · 312 阅读 · 0 评论 -
实验9.实现打印字符串和数值
实验:混合编程实现打印字符函数原创 2024-07-20 23:51:46 · 279 阅读 · 0 评论 -
实验8.混合编程实现打印字符函数
实验:混合编程实现打印字符函数原创 2024-07-20 12:38:14 · 271 阅读 · 0 评论 -
实验7.加载内核
实验:加载内核,分析 kernel.bin 的 elf 文件头,找到各个段,然后将各个段复制到内存指定位置。原创 2024-07-18 00:27:33 · 161 阅读 · 0 评论 -
实验6.分页
实验:构造页目录及页表,完成从虚拟地址3GB~3GB+1MB到实地址0 ~1MB的映射以及虚拟地址0 ~ 1MB向物理地址0 ~ 1MB的映射注意:此时loader.bin大小超过1024字节 所以mbr要读取3个扇区,dd要复制3个扇区。原创 2024-07-17 11:29:33 · 316 阅读 · 0 评论 -
实验5.内存容量检测
实验:利用BIOS中断获取物理内存容量注意:mbr不再跳转到loader的起始位置,而是loader的loader_start位置。原创 2024-07-16 17:45:40 · 347 阅读 · 0 评论 -
《操作系统真相还原》全实验记录
操作系统真相还原实验记录原创 2024-07-16 15:35:15 · 263 阅读 · 0 评论 -
实验4.保护模式
实验:编写boot.inc和loader.s,完成在内存里写好3个段描述符(代码段、数据段、显存段)、赋值好GDTR寄存器、创建好表示3个选择子的字段后,进入保护模式原创 2024-07-16 14:59:13 · 1030 阅读 · 0 评论 -
实验3.mbr读取硬盘
实验:编写 mbr,读取0盘0道2扇区的内容写入内存,然后跳转执行写好的loader.s。原创 2024-07-16 14:30:44 · 366 阅读 · 0 评论 -
实验2.mbr读写显存
实验 1:编写 mbr,直接写入显存显示字符。原创 2024-07-16 11:32:35 · 253 阅读 · 0 评论 -
实验1.第一次编写mbr
实验 1:编写 mbr,在屏幕上显示字符。原创 2024-07-16 11:19:15 · 336 阅读 · 0 评论 -
实验0.环境搭建
【代码】实验0.环境搭建。原创 2024-07-16 10:59:01 · 334 阅读 · 0 评论