oNya

oNya

👋 Hello there!

  • I’m oNya, currently pursuing my education in Computer Science at Beihang University in Beijing.
  • Hope I can be of assistance to you.

[BUAA-OS] 理论作业 5

点此查看作业源文件 1. 有五个进程P1、P2、P3、P4、P5,它们同时依次进入就绪队列,它们的优先数和需要的处理器时间如下表 进程 处理器时间 优先级(数小优先级高) P1 $10$ $3$ P2 $1$ $1$ P3 $2$ $3$ P4 $1$ $4$ P5 $5$ $2$ 忽略进行调度等所花费的时间,回答下列问题: ...

2025年5月4日 · 6 min · 2858 words · oNya

[BUAA-ML] 第一次实验报告

一、实验过程中,是否对输入数据进行了归一化或标准化处理?试说明这两种方法的区别,并分析为什么线性回归模型可能对特征的尺度敏感。 (一)实验中的预处理方法 实验中使用了标准化处理: scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) fit_transform对训练集计算均值和标准差并应用转换。 transform对测试集直接使用训练集的参数进行转换。 (二) 归一化与标准化的区别 归一化 (Normalization): 将数据缩放到固定范围 $[x_{\min}, x_{\max}]$,公式为: ...

2025年4月27日 · 3 min · 1286 words · oNya

[BUAA-OS] Lab 3 实验报告

一、思考题 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是附上权限位。 ...

2025年4月21日 · 4 min · 1726 words · oNya

[BUAA-OO] Unit 2 总结

几千字的流水账真的会有人从头看到尾吗(? 不按作业的要求顺序来了,有意思的放最前,重要的放其次,其余的往后排。 我们真的需要一台电梯么? 首先,回顾一下作业要求:我们要模拟六台电梯的运行、调度,和其开关门、移动、对乘客的接、送行为,其中大部分行为需要等待一定的现实时间。而评测要求我们在每一状态转移完成时输出一条信息,以供测评评测机中模拟的电梯状态机是否在符合正确性规范的前提下完成功能,并评测性能。 ...

2025年4月18日 · 13 min · 6223 words · oNya

[BUAA-OS] 理论作业 4

点此查看作业源文件 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个座位都是满的有人已经就坐,这就意味着这些人都是一起来吃饭的,那么你需要等待所有的人一起离开才能就坐。编写同步原语,实现这个场景的约束。 ...

2025年4月17日 · 3 min · 1217 words · oNya

[BUAA-OS] Lab 2 实验报告

一、思考题 Thinking 2.1 请根据上述说明,回答问题:在编写的 C 程序中,指针变量中存储的地址被视为虚拟地址,还是物理地址?MIPS 汇编程序中 lw和sw 指令使用的地址被视为虚拟地址,还是物理地址? ...

2025年4月11日 · 7 min · 3075 words · oNya

[BUAA-OS] 理论作业 3

点此查看作业源文件 第一题 (1)请问进程整个的地址空间有多少字节?一页有多少字节? $$ 进程整个的地址空间 = 2^{32}B = 4GB $$$$一页有 2^{12}B = 4KB$$(2)一个进程如果从 0x80000000 开始映射 4MB 大小页表空间,求第一级页表(页目录)的起始逻辑地址,并指出从哪个逻辑地址可以读出第一级页表(页目录)所在的物理页框号。说明理由。(注意 B 代表字节,一个 32 位地址占 4 字节) 进程页表空间映射起始地址为0x80000000,所以页目录的第0x200项指向页表空间,所以第一级页表的起始逻辑地址为0x80200000。 ...

2025年4月6日 · 4 min · 1892 words · oNya

[BUAA-OS] 理论作业 2

点此查看作业源文件 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,但该地址只是进程的逻辑地址空间中的一部分。 ...

2025年3月28日 · 6 min · 2740 words · oNya

[BUAA-OS] Lab 1 实验报告

一、思考题 Thinking 1.1 在阅读附录中的编译链接详解以及本章内容后,尝试分别使用实验环境中的原生x86工具链(gcc、ld、readelf、objdump等)和MIPS交叉编译工具链(带有mips-linux-gnu-前缀,如mips-linux-gnu-gcc、mips-linux-gnu-ld),重复其中的编译和解析过程,观察相应的结果,并解释其中向objdump传入的参数的含义。 ...

2025年3月28日 · 4 min · 1746 words · oNya