11 2012 档案
摘要:先看看xv6的进程创建和切换机制,再做jos实验lab3xv61. 创建第一个进程userinit()1. 从进程结构数组找到一个空闲的进程结构 struct proc2. 为进程创建页目录pgdir,并在其中对内核区域进行映射(setupkvm, kmap)3. 申请一个物理页,复制initcode,并将其映射到0地址开始。4. 设置进程的trapframe数据,进程的栈如下图。5. 将进程状态设置为RUNNABLE2. 进程切换刚刚创建好第一个进程init,那么如何切换到该进程环境中去执行?scheduler()1. 到进程数组中找到状态为RUNNABLE的进程。当前系统只有init这个进
阅读全文
摘要:进程为程序提供了私有的环境,或者说是地址空间,保证这个地址空间不会被其他程序读写。操作系统要结合硬件的内存管理单元来实现这个功能。先来看看xv6* 分页x86的分页机制使用页表(page table)来将虚拟地址转换(或者称为映射)成物理地址。虚拟地址是程序指令看到的地址,物理地址是处理器硬件看到的地址。一个页表有2^20个入口项PTE(page table entry)。每个PTE有20-bit的物理页号(physical page number PPN)和一些标志。如下图,实际的转换过程分为两级,映射过程:1. 用虚拟地址的最高10位(Dir)到页目录中找到相应页目录项(CR3寄存器中保存
阅读全文
摘要:这个实验分为三个部分:1. 熟悉x86汇编语言,QEMU x86模拟器,和PC上电启动过程。2. 介绍6.828内核的引导加载程序(boot loader),位于boot目录。3. 介绍6.828内核的原型JOS,位于kernel目录软件设置:下载jos源代码,搭建环境第一部分:PC引导* 熟悉x86汇编x86的汇编语法有NASM汇编和GNU汇编两种,NASM是所谓的Intel语法,GNU使用AT&T语法。两者语义相同表达方式不同,区别可见http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html其中关于
阅读全文
摘要:Linux power supply class========================UPS:不间断电源, uninterrupted power supply,当正常交流供电中断时,将蓄电池输出的直流变换成交流持续供电的电源设备。AC:交流电(alternating current)DC:直流电(Direct Current,简称DC),是指方向和时间不作周期性变化的电流,但电流大小可能不固定,而产生波形。摘要~~~~Power supply class用于向用户层提供电池、UPS、AC、DC等电源的属性。其中定义了一系列核心属性,几乎囊括所有电源设备。这些属性通过sysfs和ue
阅读全文
摘要:jiffies的定义:// include/linux/jiffies.h
extern u64 __jiffy_data jiffies_64;
extern unsigned long volatile __jiffy_data jiffies;Gcc defines __ARMEB__ for big-endian ARM and __ARMEL__ forlittle-endian ARM.以小端为例,arch/arm/kernel/vmlinux.lds 中将jiffies定义为jiffies_64的低4位。以arm平台为例,jiffies变量是unsigned long类型的,那么
阅读全文