操作系统
文章平均质量分 72
davelv
这个作者很懒,什么都没留下…
展开
-
[MIT6.828]LAB2 Exercise & Question总结
<br />E1:In the file kern/pmap.c, you must implement code for the following functions.<br /> boot_alloc()<br /> page_init()<br /> page_alloc()<br /> page_free()<br /><br />static void *boot_alloc(uint32_t n, uint32_t align){ extern原创 2010-11-28 12:43:00 · 3019 阅读 · 0 评论 -
关于并行计算发展的一些思考
本文是在CU论坛上回答网友的问题《C语言标准有没有规定前一个语句必须在后一个语句之前完成?》而引发的关于并行处理的一些见解和思考,以下正文 难得OwnWaterloo老兄想起了在下,以及最近我也看到了一些并行方面的帖,就浮上水面说说自己的见解吧。 C语言是典型的Von原创 2011-10-17 21:15:06 · 2087 阅读 · 2 评论 -
[MIT6.828] LAB4 PART A
<br />Exercise 1.Implement round-robin scheduling in sched_yield() as described above. Don't forget to modify syscall() to dispatch sys_yield(). <br /><br />修改kern/sched.c文件的sched_yield()函数<br />// Choose a user environment to run and run it.voidsche原创 2011-02-22 15:36:00 · 2731 阅读 · 6 评论 -
[MIT6.828] LAB4 Part B: Copy-on-Write Fork
<br />Exercise 3. Implement the sys_env_set_pgfault_upcall system call. Be sure to enable permission checking when looking up the environment ID of the target environment, since this is a "dangerous" system call. <br /><br />修改kern/syscall.c文件,添加注册页故障处理函原创 2011-03-03 20:13:00 · 1799 阅读 · 4 评论 -
[Linux内核完全剖析]第七章 初始化程序(init)总结
<br />系统初始化程序init/main.c主要功能是对系统进行初始化,并切换到用户模式下执行登录程序。<br />主要步骤如下:<br />1、系统初始化部分:<br /> // init/main.c void main(void) // 前面代码略,以下是内核进行所有方面的初始化工作。 mem_init (main_memory_start, memory_end); trap_init (); // 陷阱门(硬件中断向量)初始化。(ke原创 2010-11-22 16:13:00 · 1441 阅读 · 0 评论 -
[Linux内核完全剖析]第六章 引导启动程序(boot)总结
<br />Linux0.11中设备命名方式:<br /><br />1-内存、2-磁盘、3-硬盘、4-ttyx(串行终端)、5-tty(控制终端)、6-并口、7-匿名管道。<br />硬盘逻辑设备号命名方式:设备号*0x100+次设备号。<br />次设备号:(硬盘号-1)*5+分区号,如不带分区号则代表整块硬盘。<br />这种命名方式在0.95内核以后被废除。<br /><br />boot目录下共有3个文件:<br />1、bootsect.s:as86汇编文件,主要用来载入原创 2010-11-16 18:14:00 · 1071 阅读 · 1 评论 -
[Linux内核完全剖析]第五章Linux内核体系结构5.7总结 进程控制
<br />PCB(Process Control Block 进程控制块)又称任务数据结构,位于include/linux/sched.h中:<br />struct task_struct{ long state; //任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。 long counter; //任务运行时间计数(递减)(滴答数),运行时间片。 long priority; //运行优先数。任务开始运行时counter = priority。原创 2010-11-11 22:31:00 · 1226 阅读 · 0 评论 -
[Linux内核完全剖析]第五章Linux内核体系结构5.1-5.3总结 Linux内存空间分配
<br />Linux内核是宏/单内核,分5个模块:进程调度模块、内存管理模块、文件系统模块、进程间通讯模块、网络接口模块。<br /><br />三种地址概念:<br />虚拟地址(Virtual Address)、逻辑地址(Logical Address):是程序产生的。虚拟地址由段选择符和段内偏移两部分组成,段内偏移又称逻辑地址。需根据GDT和LDT进行分段变换才能进行下一步地址处理。x86可以索引2^14个段选择符,每个段最长2^32B,最大虚拟地址空间为2^46(64T)B。<br /><原创 2010-11-08 10:24:00 · 1166 阅读 · 2 评论 -
[MIT6.828] LAB1中VBE图形界面测试总结
<br />看到红色的Challenge就想挑战一把,于是搞了下VESA图形模式的编程。<br /><br />科普知识:<br /><br />什么是VBE?<br />VBE的全称是VESA BIOS Extension。<br /><br />什么是VESA?<br />VESA的全称是Video Electronics Standards Association即视频电子标准协会,是由代表来自世界各地的、享有投票权利的超过165家成员公司的董事会领导的非盈利国际组织。<br />原创 2010-11-04 22:59:00 · 3337 阅读 · 3 评论 -
[MIT6.828]LAB1输入输出TAB字符的若干问题及总结
<br />LAB1给代码中的'/t'的处理很简陋,直接把'/t'替换为5个空格,这和我们平时习惯有很大不同,所以要改造一下。<br /><br />1、在kern/console.c cga_putc()函数中,可以看到'/t'case分支,把这个分支替换为如下代码:<br /> case '/t': do{ cons_putc(' '); }while(crt_pos%原创 2010-11-02 17:05:00 · 1414 阅读 · 3 评论 -
[MIT6.828]ELF文件格式
1、整体ELF文件结构看起来如下:链接视图(Linking View)是链接器关注的结构,执行视图(Execution View)是程序加载器关注的结构,它们是一个文件的不同表现,之间的关系类似于C语言中的联合。在规定中只有ELF头部(ELF header)是确定位置的,其他可以是不固定(依据ELF头、程序头、区域头的信息而定),但是实际使用中经常用上述布局。原创 2010-10-29 18:04:00 · 1012 阅读 · 0 评论 -
[MIT6.828] 调试虚拟机OS时断点设置问题和总结
<br /> 在qemu+gdb的调试环境中,gdb的b命令生效地址必须是虚拟机的物理地址,但是OS中运行的程序大部分都是以虚拟地址出现的,所以计算出真实的物理地址才能下断点。<br /> MIT6.828的LAB1中的内核代码中,内核段基址为0x10000000(可由kern/entry.S中的mygdt标号下的数据计算得到),这样如果一个虚拟地址是0xF010013A(kern/init.c中i386_init()函数入口),那么它的物理地址就是0x0010013A,要在这个地方设置断点才有效。原创 2010-10-31 00:20:00 · 1580 阅读 · 0 评论 -
[MIT6.828] LAB3总结
<br />LAB3:<br />Q1.What is the purpose of having an individual handler function for each exception/interrupt? (i.e., if all exceptions/interrupts were delivered to the same handler, what feature that exists in the current implementation could not be pro原创 2010-12-22 17:46:00 · 3653 阅读 · 7 评论 -
[Linux内核完全剖析]第四章总结
<br />第四章<br />本章主要讲述了IA32架构下的段页管理以及中断异常和任务的切换等基础知识。要点多,理解难度大。<br /><br />要点1: 段描述符和门描述符的格式<br />要点2: 段选择和切换的时候进行的权限验证<br />要点3: 页目录和页表的格式以及权限设置<br />要点5: CR0-CR3 GTDR ITDR LTDR TR EFLAG寄存器在保护模式下的作用<br />要点6: 操作系统加载和初始化时必须设置好保护模式下使用的数据结构如下:<br />原创 2010-10-26 23:07:00 · 898 阅读 · 0 评论 -
[Linux内核完全剖析]第十三章 内存管理总结
<br />异常处理:<br />在开启分页的状态下,CPU执行线性地址到物理地址转化的过程中检测到如下条件,就会引起页异常(Page fault)int 14:<br />1、页目录或者页表项中的存在位为0;<br />2、当前程序没有足够的权限访问指定页面。<br />这时CPU会做以下操作:<br />1、将错误码压入栈中,在14号中断中只有最低三位有效。位0(P):0/1 页或者页表不存在/存在;位1(R/W):0/1代表读/写操作出错 ;位2(U/S):0/1代表用户/系统页。原创 2010-12-09 19:08:00 · 1007 阅读 · 0 评论 -
XV6内存布局
<br />1、 规定系统最大物理内存为16MB。<br />2、 应用程序使用0-640K虚拟内存,640K-1M是映射IO空间,1M以上的高位内存只有内核可以使用,4064-4096最高32M地址空间映射到不同的设备。<br />3、 每个应用程序都有自己的页表,页表的前160项(0-640K)内存是自己映射的,从640K到最高物理内存,其物理地址和虚拟地址是一致的,不过应用程序没有访问高于640K内存的权限。这样可以> 快速从应用层切换到内核层。原创 2010-12-06 19:38:00 · 2240 阅读 · 5 评论 -
[MIT6.828]LAB2 Challenge 总结
<br />Challenge 1: 大页机制的实现<br />没有在代码中实现,写了个步骤供参考:<br />0、先把预定义的PGSIZE之类的宏都更改为与大页相匹配的情况。<br />1、由于页大小变成了4M,所以要修改从代码,要内核4M处加载。<br />3、page_init()中内存布局也会发生对应变化,低端4M保留给实模式和IO映射,然后4M-8M是内核代码数据,8M-16M可以用来放置页目录以及物理页面数据结构,其他空闲。<br />4、用于页面映射的操作的pgdir_wa原创 2010-12-02 17:16:00 · 1978 阅读 · 0 评论