【pintos】
xiazdong
ECNU-SEI
展开
-
第0讲:pintos概论
<br />正好在学pintos,看那个文档实在麻烦,为了方便大众~~还是写个东西~<br /> <br />pintos程序在simulator上跑,simulator有bochs和qemu两种选择。进入系统后首先面临的问题是无处下手。因为不知道文件的目录,就不能在command里做什么。<br />解决方法:打开file manager,会显示目录,如/home/osproj/Desktop<br />让我们先来看一下桌面上的东西~pintos是一个单纯的文件夹,pintos.tar.gz是一个打包压缩原创 2011-04-05 10:55:00 · 9835 阅读 · 7 评论 -
project2注意事项
哎。。这是我最起码3个星期得出的纠结结论。。。由于这点,使得我的进度一直受阻。虽然听上去很简单,但是我却发现地很晚。。问题:pintos run args-*一类的会出现load failed。解决方案:因为需要把userprog/build/tests/userprog中的可执行文件按照pintos -p [directory and name] -a name -- -q 导入一开始创原创 2011-06-22 18:44:00 · 5274 阅读 · 4 评论 -
[转]中断
<br />1. 中断基本概念<br />什么是中断?先打个比方。当一个经理正处理文件时,电话铃响了(中断请求),不得不在文件上做一个记号(返回地址),暂停工作,去接电话(中断),并指示“按第二方案办”(调中断服务程序),然后,再静下心来(恢复中断前状态),接着处理文件……。计算机科学家观察了类似实例,“外师物化,内得心源”,借用了这些思想、处理方式和名称,研制了一系列中断服务程序及其调度系统。<br /> 中断是CPU处理外部突发事件的一个重要技术。它能使CPU在运行过程中对外部事件原创 2011-04-18 08:10:00 · 1320 阅读 · 0 评论 -
thread.c
thread_block()用于将current_thread 终止变成blocked状态,不能跑,只有在调用thread_unblock()后进入就绪队列。thread_yield()用于直接把current_thread进入就绪队列,在任意时刻可再次被调用。list_entry返回一个线程。idle_thread平常是不在ready_list中的。1.在thread_start()即系统刚开始时,idle_thread在ready_list中。2.在ready_list为空时,调用idle_thread原创 2011-04-16 15:53:00 · 4515 阅读 · 0 评论 -
interrupt.c
pintos中的中断有256个即0-255.void *frame_pointer; 是一个frame总会有个指针void (*eip) (void); 下一个执行的指令的地址。void *esp; stack pointer 栈指针IDT(Interrupt Descriptor Table)是一个描述interrupt的数组,即idt[INTR_CNT];PIC原创 2011-06-05 22:55:00 · 2083 阅读 · 0 评论 -
pte.h
#define PTSHIFT PGBITS /*page table index的开始位:12*/#define PTBITS 10 /*page table index的位长度*/#define PTSPAN (1 #define PTMASK BITMASK(PTSHIFT, PTBITS) /*掩码,即过滤其他位原创 2011-06-05 22:09:00 · 1158 阅读 · 0 评论 -
palloc.c
这个源文件主要讲的是页分配的过程。enum palloc_flags { PAL_ASSERT = 001, /* Panic on failure. */ PAL_ZERO = 002, /* Zero page contents. */ PAL_USER = 004 /* User page. */ }原创 2011-06-03 07:10:00 · 2837 阅读 · 0 评论 -
pintos 与windows宿主机的文件共享
<br />在分配数据空间中分配一个目录,并提供一个名字,比如share<br />打开terminal,输入sudo mount -t vboxsf share /home/osproj/Desktop/<br />即可共享文件~yeah~原创 2011-04-14 00:41:00 · 1401 阅读 · 0 评论 -
调试工具
1.printf 视觉是最清晰的,理想化的,你在每行都写一个printf,则你就能很清晰的定位,哪行错了。2.ASSERT(CONDITION)能够有效地提前地检测出问题。UNUSED:在函数的参数之后添加,说明可能这个参数不会用到。NO_RETURN:在函数的原型后添加说明函数没有返回。NO_INLINE:加在函数原型告诉编译器不能把这个函数当作内联函数。PRINTF_FORMAT:在函数原型告诉编译器函数会打印string ,也可以告诉编译器参数类型错误问题。3.backtrace:如果你想了解你的程序原创 2011-04-08 20:19:00 · 2662 阅读 · 0 评论 -
实验的报告注意事项
<br />一。文档注意事项:<br />1.数据结构:<br />把你新添加或修改的struct,global/static variable,typedef,enumeration都放进去,把每个的目的在25个字里写清楚。每个都要有注释。<br />2.算法:how<br />说一个code是怎么工作的,而不是单纯的解释每行的代码。。(懂点语言的人都能解释。。)要讲的是你的实现思想。<br />3.synchronization:<br />同步多线程<br />4.理由:why<br />为什么要这样原创 2011-04-05 11:17:00 · 2694 阅读 · 0 评论 -
vaddr.h
从threads/Vaddr.h中得知,意思是Valid address.即里面的函数都是判断地址空间的有效性。pintos一页为4KB。31 12 11 0+--------------+----------+| page number | offset |+--------------+----------+因此第一页的末尾地址为100....0后面有12原创 2011-06-05 22:21:00 · 1184 阅读 · 0 评论