- 博客(15)
- 资源 (3)
- 收藏
- 关注
原创 计算机操作系统相关书籍电子版
更多计算机书籍下载:下载页面操作系统:现代操作系统:4eaj30天自制操作系统:vdun一个操作系统的实现:im0d深入理解计算机操作系统:2duk
2021-03-02 20:21:36
2215
原创 计算机有关书籍资源的分享(无积分)
计算机有关书籍资源的分享学习任何一门科目,都是需要理论联系实际的,作为偏应用类型的计算机学科,敲代码固然重要,但如果有较好的理论做支撑,定能起到事倍功半的效果。算法啊哈算法:ymz3编程珠玑:753z编程之美:fsuu数据结构与算法分析:jk30算法导论:wobg算法竞赛入门经典:880y算法:mqli大话数据结构:m4ur挑战程序设计竞赛:jzh7专业课python编程小白的第一本python入门书:021c用python写网络爬虫:38sx精通scrapy爬虫:12ig
2021-02-25 11:52:47
1256
1
原创 一个操作系统的实现(8)进程间通信
主要内容实现进程间的通信一Linux的系统调用与Minix的系统调用不同,以点见面可以了解一些宏内核与微内核的区别。Linux的fork函数通过调用中断0x80,通过IDT转化为_system_call,最终通过一个函数指针数组转化为调用_sys_fork实现Minix的调用中只有接收消息和发送消息的系统调用,总共有三种SEND,RECEIVE,BOTH。Minix的fork函数实现需要一个内存管理器(MM),负责fork所要做的工作对fork的调用先转化为内核态函数sys_call,sys_
2020-09-06 17:05:49
451
原创 一个操作系统的实现(7)区分任务进程 实现printf
区分任务和用户进程对于进程的作用和重要程度,我们进行划分,将TTY进程称为任务,让其运行在ring1,让普通的用户进程运行在ring3。定义宏区分任务和用户进程#define NR_TASKS 1#define NR_PROCS 3在其余的代码中区分task和proc u8 privilege; u8 rpl; int eflags; for (i = 0; i < NR_
2020-09-03 23:46:01
243
原创 一个操作系统的实现(6)键盘及控制台
主要内容实现简单的I/O一1.添加一个简单的键盘中断处理程序PUBLIC void keyboard_handler(int irq){ disp_str("*");}2.打开键盘中断8259A的IRQ1对应的就是键盘PUBLIC void init_keyboard(){ put_irq_handler(KEYBOARD_IRQ, keyboard_handler);/*设定键盘中断处理程序*/ enable_irq(KEYBOARD_IRQ);
2020-09-03 18:11:05
696
原创 一个操作系统的实现(5.2)系统调用,进程
主要内容实现简单的系统调用实现进程调度一系统调用类似于Windows的API,是应用程序与操作系统之间的桥梁,对于一个程序无法访问的区域,就需要用到系统调用。二1.用寄存器eax来实现消息的传递%include "sconst.inc"_NR_get_ticks equ 0 ; 要跟 global.c 中 sys_call_table 的定义相对应!INT_VECTOR_SYS_CALL equ 0x90global get_ticks ; 导出符号bits 32[
2020-09-01 23:27:27
369
原创 一个操作系统的实现(5.1)进程实现
主要内容进程的介绍进程的创建一要想简单的了解进程,可以用一个比喻:把工作的人比作系统,人要做的工作就是进程,每种工作相对独立,有自己特有的工具和方法,同一时间,一个人只能做一样工作,但可以把各个工作轮换着做。进程也类似,有进程调度模块,有自己要用的资源,代码,数据,对进程的调度,就好比一个人轮换着做不同的工作。二1.以时钟中断为例,一个运行的进程运行到一半,时钟中断发生,保存进程状态,特权级变化后开始执行时钟中断处理程序,中断处理程序调用进程调用模块,指定下一个运行的进程(在这里让进程运行在ri
2020-09-01 17:39:15
450
原创 一个操作系统的实现(4.2)简单扩充内核
主要内容扩充内核一为了方便控制,需要将esp,gdt等内容也放进内存。将位于loader中的gdt复制给新的gdt,并更新gdt的信息#include "type.h"#include "const.h"#include "protect.h"PUBLIC void* memcpy(void* pDst, void* pSrc, int iSize);PUBLIC void disp_str(char * pszInfo);PUBLIC u8 gdt_ptr[6]; /* 0~1
2020-08-30 22:16:46
381
原创 一个操作系统的实现(4.1)建立内核雏形
主要内容建立内核的雏形一extern choose ; int choose(int a, int b);[section .data] ; 数据在此num1st dd 3num2nd dd 4[section .text] ; 代码在此global _start ; 我们必须导出 _start 这个入口,以便让链接器识别global myprint ; 导出这个函数为了让 bar.c 使用_start: push dword [num2nd] ; `. push dw
2020-08-30 21:15:39
438
转载 B站最近很火的damedane,unravel图片唱歌
最近看B站,经常会刷到图片唱歌的视频,今天正好看到一个视频教程,所以打算自己也做一个玩玩,在此做一个记录。视频链接 (别忘了三连0.0)开始(要用谷歌网盘)1.下载视频作者的分享kea82.在谷歌网盘创建一个新文件(文件名为first-order-motion-model)按照代码要求的文件名,否则需要改代码。3.将下载好的一系列东西上传到刚刚新建的文件夹(上传可能会较慢)可以复制我分享的 https://drive.google.com/drive/folders/1VQ53me-yjV
2020-08-30 19:32:41
20315
1
原创 操作系统的实现(3)实现loader
主要内容突破引导扇区512字节的限制。理论为了添加更多的内容,引导扇区的512字节显得不足,所以添加一个模块loader将任务交给他来做,而引导扇区负责将loader加载入内存。为了以后操作方便,将软盘做成FAT12格式。FAT12:从DOS时代就开始使用的文件系统,将磁盘分为扇区,簇,分区等层次。扇区:磁盘上最小的数据单元簇:一个或多个扇区分区:整个文件系统引导扇区就是整个软盘的第0个扇区,引导扇区有一个叫做BPB的数据结构(在被识别时起作用),在引导扇区之后是两个完全相同的FAT表(表二
2020-08-29 23:51:06
386
原创 一个操作系统的实现(2.3)页式存储及中断异常的处理
主要内容1.页式存储介绍2.中断和异常一1.分页机制中的页,就是一块内存,在80386中为4096字节(4KB)。2.当分页机制启动时,逻辑地址转化为物理地址的过程也会变化(逻辑地址-》线性地址-》物理地址——。3.在两级页表中,第一级叫做页目录,大小为4KB,有1024个表项(PDE),每个表项对应一个二级页表,第二级的页表也有1024个表项(PTE),每个表项对应一个物理页。4.转化规则:从寄存器cr3指定的页目录中根据线性地址高10位得到页表地址,然后在页表中根据线性地址的第12到21位
2020-08-29 00:12:10
386
1
原创 一个操作系统的实现(2.2)保护模式下的操作
主要内容1.实现从保护模式跳回实模式2.LDT3.对保护模式下特权级的简单介绍一在从保护模式跳转到实模式前要保证对应的段描述符寄存器有合适的段界限和属性,需要加载一个选择子到段寄存器。此外保护模式为32位环境,实模式为16位环境,需要从16位代码段返回`1.加载选择子(新建Normal,添加在GDT中)LABEL_DESC_NORMAL: Descriptor 0, 0ffffh, DA_DRW ; Normal 描述符SelectorNormal equ L
2020-08-27 22:46:40
227
原创 一个操作系统的实现(2.1)保护模式的介绍
主要内容简单介绍了保护模式及如何进入。准备工作1.安装FreeDos,将其中的a.img命名为freedos.img并复制到工作目录(官网下载错误)。提取码gwxy2.重新生成一个软盘,命名为pm.img.3.修改bochsrc在相应地方加上floppya:1_44=freedos.img, status=insertedfloppyb:1_44=pm.img, status=insertedboot:a4.启动bochs,格式化B盘5.将目标代码用nasm编译为.com文件,复制到
2020-08-26 18:46:04
482
原创 一个操作系统的实现(1)
一个操作系统的实现(一)在校期间看了Andrew先生的《现代操作系统》,但直接记忆知识点显得过于抽象,许多内容都生疏了。正赶上大学暑假,所以希望通过动手操作来加深记忆。由于目前大一,水平有限,对于书中一些内容也是一知半解,做此贴主要是对自己知识的一个阶段复习。第一章作者本着从兴趣出来的初衷,介绍如何写一个最小的“操作系统”准备工作1.一台计算机(最好使用Linux,windows也需要借助Linux来编译源码,本人是win10,所以用的vmware来搭建的ubuntu)2.软盘(可用虚拟软盘)
2020-08-26 16:38:58
999
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人