欢迎。这是北京航空航天大学 2024-2025 学年春季学期计算机学院与软件学院《操作系统》的笔记,涵盖理论、实验与拓展。
[BUAA-OS] 理论作业 5
点此查看作业源文件 1. 有五个进程P1、P2、P3、P4、P5,它们同时依次进入就绪队列,它们的优先数和需要的处理器时间如下表 进程 处理器时间 优先级(数小优先级高) P1 $10$ $3$ P2 $1$ $1$ P3 $2$ $3$ P4 $1$ $4$ P5 $5$ $2$ 忽略进行调度等所花费的时间,回答下列问题: ...
欢迎。这是北京航空航天大学 2024-2025 学年春季学期计算机学院与软件学院《操作系统》的笔记,涵盖理论、实验与拓展。
点此查看作业源文件 1. 有五个进程P1、P2、P3、P4、P5,它们同时依次进入就绪队列,它们的优先数和需要的处理器时间如下表 进程 处理器时间 优先级(数小优先级高) P1 $10$ $3$ P2 $1$ $1$ P3 $2$ $3$ P4 $1$ $4$ P5 $5$ $2$ 忽略进行调度等所花费的时间,回答下列问题: ...
一、思考题 Thinking 3.1 请结合MOS中的页目录自映射应用解释代码中 e->env_pgdir[PDX(UVPT)] = PADDR(e->env_pgdir) | PTE_V 的含义。 UVPT是用户页表的起始虚拟地址,所以e->env_pgdir[PDX(UVPT)]是当前进程的虚拟内存中,UVPT地址所在的页目录项。而e->env_pgdir是当前进程页目录的虚拟地址,PADDR(e->env_pgdir)则是其物理地址,| PTE_V是附上权限位。 ...
点此查看作业源文件 1. 读者写者问题(写者优先) 共享读; 互斥写、读写互斥; 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)。 semaphore room_empty = 1; // 读写互斥 semaphore mutex_read = 1; // 保护 read_count semaphore mutex_write = 1; // 保护 write_count semaphore write_priority = 1; // 写者优先锁 int read_count = 0, write_count = 0; void reader() { P(write_priority); // 检查是否有写者等待 P(mutex_read); read_count++; if (read_count == 1) { P(room_empty); // 第一个读者获取读写锁 } V(mutex_read); V(write_priority); // 释放写者优先锁 // 读取 P(mutex_read); read_count--; if (read_count == 0) { V(room_empty); // 最后一个读者释放读写锁 } V(mutex_read); } void writer() { P(mutex_write); write_count++; if (write_count == 1) { P(write_priority); // 第一个写者阻止新读者 } V(mutex_write); P(room_empty); // 获取读写锁 // 写入 V(room_empty); P(mutex_write); write_count--; if (write_count == 0) { V(write_priority); // 最后一个写者允许新读者 } V(mutex_write); } 2. 寿司店问题 假设一个寿司店有5个座位,如果你到达的时候有一个空座位,你可以立刻就坐。但是如果你到达的时候5个座位都是满的有人已经就坐,这就意味着这些人都是一起来吃饭的,那么你需要等待所有的人一起离开才能就坐。编写同步原语,实现这个场景的约束。 ...
一、思考题 Thinking 2.1 请根据上述说明,回答问题:在编写的 C 程序中,指针变量中存储的地址被视为虚拟地址,还是物理地址?MIPS 汇编程序中 lw和sw 指令使用的地址被视为虚拟地址,还是物理地址? ...
点此查看作业源文件 第一题 (1)请问进程整个的地址空间有多少字节?一页有多少字节? $$ 进程整个的地址空间 = 2^{32}B = 4GB $$$$一页有 2^{12}B = 4KB$$(2)一个进程如果从 0x80000000 开始映射 4MB 大小页表空间,求第一级页表(页目录)的起始逻辑地址,并指出从哪个逻辑地址可以读出第一级页表(页目录)所在的物理页框号。说明理由。(注意 B 代表字节,一个 32 位地址占 4 字节) 进程页表空间映射起始地址为0x80000000,所以页目录的第0x200项指向页表空间,所以第一级页表的起始逻辑地址为0x80200000。 ...
点此查看作业源文件 1. 动态内存分配需要对内存分区进行管理,一般使用位图和空闲链表两种方法。128MB的内存以n字节为单元分配,对于链表,假设内存中数据段和空闲区交替排列,长度均为64KB。并假设链表中的每个节点需要记录32位的内存地址信息、16位长度信息和16位下一节点域信息。这两种方法分别需要多少字节的存储空间?哪种方法更好? 若使用位图方法: $$单元数 = \frac{128MB}{nB} = \frac{2^{27}}{n}块$$$$所需存储空间 = \frac{2^{27}}{n}b = \frac{16}{n}MB$$ 若使用空闲链表方法: $$段数=\frac{128MB}{64KB+64KB} = 2^{10}段$$$$所需存储空间 = 2^{10} \times (32 + 16 + 16)b = 8KB$$ 哪种方法更好: 当n<2048时,空闲链表所需存储空间更小,空闲链表方法更好; 当n>2048时,位图所需存储空间更小,位图方法更好。 2. 在一个交换系统中,按内存地址排列的空闲区大小是: 10KB、4KB、20KB、18KB、7KB、9KB、12KB和15KB。对于连续的段请求:12KB、10KB、9KB。使用FirstFit、BestFit、WorstFit和NextFit将找出哪些空闲区? 段请求 FirstFit BestFit WorstFit NextFit 12KB 20KB 12KB 20KB 20KB 10KB 10KB 10KB 18KB 18KB 9KB 18KB 9KB 15KB 9KB 3. 解释逻辑地址、物理地址、地址映射,并举例说明。 逻辑地址(Logical Address): 逻辑地址是程序运行时由 CPU 生成的地址,也称为虚拟地址。用户进程只能访问逻辑地址,不能直接访问物理内存。 例如某程序访问地址 0x1234,但该地址只是进程的逻辑地址空间中的一部分。 ...
一、思考题 Thinking 1.1 在阅读附录中的编译链接详解以及本章内容后,尝试分别使用实验环境中的原生x86工具链(gcc、ld、readelf、objdump等)和MIPS交叉编译工具链(带有mips-linux-gnu-前缀,如mips-linux-gnu-gcc、mips-linux-gnu-ld),重复其中的编译和解析过程,观察相应的结果,并解释其中向objdump传入的参数的含义。 ...
一、思考题 Thinking 0.1 思考下列有关Git的问题: 在前述已初始化的~/learnGit 目录下,创建一个名为README.txt的文件。执行命令git status > Untracked.txt(其中的 > 为输出重定向,我们将在0.6.3中详细介绍)。 在README.txt 文件中添加任意文件内容,然后使用add命令,再执行命令git status > Stage.txt。 提交README.txt,并在提交说明里写入自己的学号。 执行命令cat Untracked.txt 和cat Stage.txt,对比两次运行的结果,体会README.txt两次所处位置的不同。 修改README.txt 文件,再执行命令git status > Modified.txt。 执行命令cat Modified.txt,观察其结果和第一次执行add命令之前的status是否一样,并思考原因。 1. Untracked.txt $ cat Untracked.txt 位于分支 master 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容) README.txt Untracked.txt 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪) 新建了README.txt文件,处于Untracked状态。 ...
点此查看作业源文件 1.什么是多道程序设计?多道程序设计与分时系统的区别是什么? 多道程序设计技术,是指允许多个程序同时进⼊内存并运⾏。即同时把多个程序放⼊内存中,并允许它们交替在CPU中运⾏,共享系统中的各种硬、软件资源,当⼀道程序因I/O请求⽽暂停运⾏时,CPU便⽴即转去运⾏另⼀道程序。多道程序设计技术提⾼了CPU、I/O设备和内存的利⽤率,从⽽提⾼了整个系统的资源利⽤率和系统吞吐量,最终提⾼了整个系统的效率。 ...