6-828-操作系统工程-Lab6-Network Driver(Final)

PokPok
这章节是完成一个网络驱动程序,现在系统中已经存在了文件系统里,所以可以添加一个网络栈,是基于82540EM芯片(E1000)。这章节内容比我想象中难,虽然之前概览了一下,但是实际做起来的时候涉及到的概

6-828-操作系统工程-Lab5-File system, Spawn and Shell

PokPok
这个实验主要是实现spawn库函数用来读取并运行可执行文件,然后扩充操作系统的内核和库 ,使得足以在控制台上运行shell。实现这些特性需要一个文件系统,而接下来就会介绍一个简单的可读写的文件系统。 准备

6.828-操作系统工程-Lab4:Preemptive Multitasking

PokPok
在这个实验中,将会在多个用户环境同时运行时实现抢占式多任务。 part A:为JOS添加多处理器的支持,实现round-robin scheduling和增加基础的用户环境管理的系统调用,例如创建和销毁用户环境,

6.828-操作系统工程-Lab3:User Environments

PokPok
4月22日 - 5月2日 PART A 这章的练习将会取实现一些基础的用户模式下的环境,也就是进程。在这章,创建一个用户环境,读取程序镜像并且运行。 这是关于这章节代码文件的介绍 inc/env.h Public definitions for user-mode environments trap.h Public definitions for trap handling syscall.h Public definitions for system calls from user

static,extern关键词和函数指针数组

PokPok
extern 从该文件外部获取变量定义,在文件域默认有extern属性。存储属性为static,也就是在文件执行前就被放在静态数据区。 static 只在该文件域可以使用,存储属性为static。 实例 extern.c #include <stdio.h> int k = 10; extern void print(void); int main() {

Git 基础操作

PokPok
远程到本地 $ git fetch $ git merge origin/master 本地到远程 关联 git remote add origin git@github.com:haoxr/-faceDetection.git 提交到本地 $ git add . $ git commit -m "commit infomation" push $ git push -u origin master <- 第一次使用 $ git push origin master

6.828-操作系统工程-Lab2:Memory Management

PokPok
Exercise 1: 内存初始化 在 lab1 中开启了分段和分页,并且初始化了内核页目录(地址存储在CR3中),于是有了下面这样的地址转换机制。 地址转换 首先通过相应段寄存器获得地址基址,然后以虚拟地址作为偏移获得线性地址。线性地

6.828-操作系统工程-Lab1:Booting a PC

PokPok
3月14日 - 3月28日 Exercise 1 熟悉x86汇编和AT&T汇编 16-bit intel 8088 1MB = 1048576bit 内存地址: 0x00000 ~ 0xFFFFF 640KB(0x00000 ~ 0xA0000) 用户可用 参考资料 GDB启动过程 首先打开一个终端到目的lab根文件夹 $ make qemu-nox-gdb 再打开一个新的终端窗口执行以下命

DOS实模式的搭建

PokPok
前言 王爽老师的《汇编语言》中练习习题8中,有要求在DOS实模式下操作汇编代码。 之前一直用的是windows 2003的CMD中自带的debug调试,所以趁这次机会,把DOS环境搭建一下。 安装 安装方法和普

C++ iterater

PokPok
There have serveral methods: /***overload function****/ void print(int* pi) { if (pi) cout << *pi << endl; } void print(const char* p) { if (p) while (*p) cout << *p++; cout << endl; } void print(const int* beg, const int* end) { while (beg != end) cout << *beg++ << endl; } void print(const int ia[], size_t size) { for (size_t i = 0; i != size; ++i) { cout << ia[i] << endl; } } void print(const int(&arr)[2]) { for (auto i : arr) cout << i << endl; } int main() { int i = 0, j[2] = {0, 1}; char ch[5] = "Getup!