
ucore
smmrSangria
这个作者很懒,什么都没留下…
展开
-
lab2_练习1(已优化)
static voiddefault_free_pages(struct Page *base, size_t n) { assert(n > 0); struct Page *p = base; for (; p != base + n; p ++) { assert(!PageReserved(p) && !PageProper...原创 2019-03-20 22:07:51 · 294 阅读 · 0 评论 -
lab5(do_exit/do_kill/do_wait)
do_exit调用exit的进程将成为僵尸进程,同时将为所有子进程寻找新的父进程,在ucore中将内核线程init作为新的父进程。在linux中会实现寻找同进程组的进程来作为新的父进程,当找不到时在使用init。// do_exit - called by sys_exit// 1. call exit_mmap & put_pgdir & mm_destr...原创 2019-03-27 15:00:58 · 1024 阅读 · 1 评论 -
lab3_练习1/2
当缺页中断发生时,调用alloc_page申请物理页时需要检查是否还存在空闲物理页(在default_alloc_pages中),当不存在时,调用swap_out,将fifo队首的页换出内存,将页写入磁盘,在pte中记录磁盘索引。intdo_pgfault(struct mm_struct *mm, uint32_t error_code, uintptr_t addr) { in...原创 2019-03-24 12:36:17 · 272 阅读 · 0 评论 -
lab4(get_pid)
MAX_PROCESS: 系统内最多进程数MAX_PID: 是2倍的MAX_PROCESS, pid的范围是 [0, MAX_PID)next_safe: 在 [last_pid, next_safe) 区间内可以取得有效的(未被占用的)pid,初始化为MAX_PID,实际是大于last_pid且值最小的已占用的pid,在一定程度上能减少探测次数优化程序last_pid: 探测pid的...原创 2019-03-26 19:28:52 · 414 阅读 · 0 评论 -
lab4(内核线程)
原创 2019-03-26 18:10:28 · 295 阅读 · 0 评论 -
lab7(管程)
管程moniter结构mutex:初始值为1,用于对管程的互斥访问next:初始值为0,作为一个等待队列,用于阻塞已获得mutex的进程,next_count用于记录阻塞于next的进程数,类似于条件变量中的等待队列,唤醒等待进程的信号不可存储,即只可以唤醒事先进入等待队列的进程,而不能记录信号用来使后来的进程避免等待。cv:条件变量,使需要等待某一条件出现的进程进入响应的等待...原创 2019-03-30 13:11:00 · 327 阅读 · 0 评论 -
lab1_练习6
kern/trap/trapentry.S0x7b80 - esp 在tf入栈完毕后入栈trapframe tf0x7b84 - 0x00000000 - edi0x7b88 - 0x000100b4 - esi0x7b8c - 0x00007bc8 - ebp0x7b90 - 0x00007ba4 - oesp note: pusha 能入...原创 2019-03-19 14:33:02 · 342 阅读 · 0 评论 -
lab2_练习2/3
物理地址分布 ... ... ^ 0x00000 ^ start of ucore (0x100000) ^ end of ucore 首地址为pages的npage个s...原创 2019-03-22 17:41:34 · 298 阅读 · 0 评论 -
lab6(stride scheduling)
Stride调度分析论文链接:Stride Scheduling在实验中使用的Stride算法是结合时间片的一种优先级调度策略。每一个时间片结束时,选择就绪状态的进程中Pass值最小的进程分配一个时间片,在一个时间段中进程所获得的时间片数量和进程的优先级大致成正比。Resource rights are represented by tickets – abstract, fi...原创 2019-03-29 14:55:51 · 1730 阅读 · 0 评论 -
lab1_练习5(kdebug.c)
#include <defs.h>#include <x86.h>#include <stab.h>#include <stdio.h>#include <string.h>#include <kdebug.h>#define STACKFRAME_DEPTH 20extern const struct s...原创 2019-03-18 20:19:51 · 452 阅读 · 1 评论 -
lab1_练习3_bootasm.S(设置gdt 进入保护模式)
#include <asm.h># with %cs=0 %ip=7c00..set PROT_MODE_CSEG, 0x8 # 内核代码段选择子 cpl=0 index = 1.set PROT_MODE_DSEG, 0x10 # 内核数据段选择子 rpl=0 ind...原创 2019-03-13 20:29:25 · 423 阅读 · 5 评论 -
lab1_练习4(bootmain.c载入os)
### boot/bootmain.c bootmain=> 0x7d10 <bootmain>: push %ebp 0x7d11 <bootmain+1>: mov 0x7df0,%eax # eax = SECTSIZE 0x7d16 <bootmain+6>: xor %ecx,%ecx # ecx = 0 = ...原创 2019-03-18 09:06:12 · 313 阅读 · 0 评论 -
lab1_练习1
ucore的镜像文件ucore.img的生成初始状态如上图,执行“make V=”产生若干条gcc命令,参数-I用于添加头文件的搜索路径;-c 表示只产生目标文件。于是从若干.c文件产生对应的.o文件存放于obj目录下。ld命令用于将刚刚产生的目标文件链接为。参数:-o bin/kernel,产生ucore操作系统的可执行文件(第一个软件)。...原创 2019-03-12 20:41:05 · 344 阅读 · 0 评论 -
安装硬件模拟器qemu
1.sudo apt-get install qemu-system2.此时 /usr/bin 中的而可执行文件为 qemu-system-x86_64 和 qemu-system-i386,没有qemu3.执行一条软链接命令 sudo ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu4.执行指令 qemu...原创 2019-03-12 18:23:04 · 1132 阅读 · 0 评论 -
lab8
用户栈参数 uint32_t argv_size=0; uint32_t i; //计算所有参数的长度总和 for (i = 0; i < argc; i ++) { argv_size += strnlen(kargv[i],EXEC_MAX_ARG_LEN + 1)+1; } //在栈顶为字符串预留空间 ...原创 2019-04-01 21:42:49 · 334 阅读 · 0 评论