Yuerer's Blog

钰儿的Blog

文件系统和文件

  • 文件系统是操作系统中管理持久性数据的子系统 提供数据存储和访问功能
  • 文件是具有符号名 由字节序列构成的数据项集合
    • 文件是文件系统的基本数据单位
    • 文件名是文件的标识符号
阅读全文 »

死锁

由于竞争资源或者通信关系 两个或更多线程在执行中出现 用于相互等待只能由其他进程引发的事件

资源分类

  • 可重用资源(Resuable Resource)
    • 资源不能被删除且在任何时刻只能有一个进程使用
    • 进程释放资源后 其他进程可重用
    • 处理器 I/O通道 存储器 设备
    • 文件(进程访问过程中不能被删除) 数据库 信号量
    • 可能出现死锁(每个进程占用一部分资源并请求其它资源)
  • 消耗资源(Consumable Resource)
    • 资源创建和消耗
    • 在I/O缓冲区的中断 信号 消息
    • 可能出现死锁(进程间相互等待接受对方的消息)
阅读全文 »

练习0:填写已有实验

请把你做的实验代码填入本实验中代码中有“LAB1”/“LAB2”/“LAB3”/“LAB4”/“LAB5”/“LAB6”的注释相应部分。并确保编译通过。注意:为了能够正确执行lab7的测试应用程序,可能需对已完成的实验1/2/3/4/5/6的代码进行进一步改进。

1
2
3
4
5
6
7
8
9
10
这次又是要修改 trap.c
vmm.c trap.c default_pmm.c pmm.c proc.c swap_fifo.c
trap.c:
static void trap_dispatch(struct trapframe *tf) {
++ticks;
/* 注销掉下面这一句 因为这一句被包含在了 run_timer_list()
run_timer_list() 在之前的基础上 加入了对 timer 的支持 */
// sched_class_proc_tick(current);
run_timer_list();
}
阅读全文 »

信号量(Semaphore)

操作系统提供的一种协调共享资源访问的方法 由 Dijkstra 提出

  • 软件同步是平等线程间的一种同步协调机制
  • OS是管理者 地位高于进程
  • 用信号量表示系统资源数量
  • 早期操作系统主要同步机制(现在很少用)
  • 信号量是一种抽象数据类型
    • 由一个整型变量(sem)和两个原子操作组成
    • P() sem - 1 若 sem < 0 进入等待 否则继续
    • V() sem + 1 若 sem <= 0 唤醒一个等待进程
阅读全文 »

并发进程的正确性

执行过程是不确定性和不可重现的 程序错误可能是间歇性发生的

  • 独立进程
    • 不和其他进程共享资源或状态
    • 确定性 输入状态决定结果
    • 可重现 能够重现起始条件
    • 调度顺序不重要
  • 并发进程
    • 在多个进程间有资源共享(都要CPU 内存)
    • 不确定性
    • 不可重现
阅读全文 »

练习0:填写已有实验

请把你做的实验2/3/4/5的代码填入本实验中代码中有“LAB1”/“LAB2”/“LAB3”/“LAB4”“LAB5”的注释相应部分。并确保编译通过。注意:为了能够正确执行lab6的测试应用程序,可能需对已完成的实验1/2/3/4/5的代码进行进一步改进。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
复制以下文件 其中 proc.c 和 trap.c 需要进行修正
vmm.c trap.c default_pmm.c pmm.c proc.c swap_fifo.c
proc.c:
static struct proc_struct *alloc_proc(void) {
// 添加如下几行 初始化进程所属就绪队列 初始化就绪队列指针 初始化时间片
proc->rq = NULL;
list_init(&(proc->run_link));
proc->time_slice = 0;
}
trap.c:
static void trap_dispatch(struct trapframe *tf) {
// 在时钟中断下 添加以下几行 并去掉之前设置 进程需要调度标记
// 这个标记现在已经被 调度程序所使用了 不再需要自己控制
++ticks;
sched_class_proc_tick(current);
// current->need_resched = 1;
}
阅读全文 »

CPU资源的时分复用

进程切换 CPU资源的当前占用者的切换

  • 保存当前进程在 PCB中的执行上下文(CPU状态)
  • 恢复下一个进程的执行上下文

处理机调度

  • 从就绪队列中挑选出下一个占用CPU运行的进程
  • 从多个可用CPU中挑选就绪进程可使用的CPU资源
阅读全文 »

练习0:填写已有实验

请把你做的实验1/2/3/4的代码填入本实验中代码中有“LAB1”,“LAB2”,“LAB3”,”LAB4”的注释相应部分。注意:为了能够正确执行lab5的测试应用程序,可能需对已完成的实验1/2/3/4的代码进行进一步改进。

1
2
这几个文件补上 说真的最烦这个步骤 但是这次 不只是直接复制 还要补充
vmm.c trap.c default_pmm.c pmm.c proc.c

以下为补充的代码块

阅读全文 »

练习0:填写已有实验

本实验依赖实验1/2/3。请把你做的实验1/2/3的代码填入本实验中代码中有“LAB1”,“LAB2”,“LAB3”的注释相应部分。

1
vmm.c trap.c default_pmm.c pmm.c swap_fifo.c 这几个补上去就完事了

练习1:分配并初始化一个进程控制块

alloc_proc函数(位于kern/process/proc.c中)负责分配并返回一个新的struct proc_struct结构,用于存储新建立的内核线程的管理信息。ucore需要对这个结构进行最基本的初始化,你需要完成这个初始化过程。

【提示】在alloc_proc函数的实现中,需要初始化的proc_struct结构中的成员变量至少包括:state/pid/runs/kstack/need_resched/parent/mm/context/tf/cr3/flags/name。

阅读全文 »
0%