- 博客(4)
- 收藏
- 关注
原创 施磊高级课程笔记
使用不带计数的智能指针时,推荐使用unique_ptr,因为使用std::move来把当前对象的资源传给下一个调用的对象,更形象。std::forward :将对象的值完美转化,也就是说输入左返回左,输入右返回右(因为编译器认为右值也是一种左值)c++对于对象构造的优化:用临时对象生成新对象的时候,临时对象就不产生了,直接构造新对象就行了。3.接收返回值是对象的函数调用的时候,优先按照初始化的方法接收,而不是按赋值的方法接收。2.函数返回对象的时候,应该优先返回一个临时对象,而不是一个定义过的对象。
2025-04-10 15:15:47
278
原创 第三章 页表:操作系统为每个进程提供私有地址空间和内存的机制
尽管内核通过高内存映射使用其栈,但它们也可以通过直接映射的地址被内核访问。另一种设计可能只是使用直接映射,并在直接映射的地址处使用栈。然而,在这种安排中,提供保护页面将涉及取消映射其他虚拟地址,这些地址将指向物理内存,这将很难使用。内核使用权限 PTE_R 和 PTE_X 映射 trampoline 和内核文本的页面。内核从这些页面读取并执行指令。内核使用权限 PTE_R 和 PTE_W 映射其他页面,以便它可以读写这些页面中的内存。保护页面的映射是无效的。内核页表初始化Xv6 使用和一系列核心函数(如。
2025-02-13 22:10:52
1541
原创 XV6第二章操作系统组织
例如,即使进程的数量多于硬件 CPU 的数量,操作系统也必须确保所有进程都有机会执行。例如,如果管道中的一个应用程序失败,内核会为管道中的下一个进程生成一个文件结束信号。应用程序可以直接与硬件资源交互,并以最适合应用程序的方式使用这些资源(例如,以实现高性能或可预测的性能)。xv6的系统调用接口被精心设计,以提供程序员的便利和强隔离的可能性。如果只有进程例如上一章中的系统调用变成一个进程的库,那么还可以将库函数进行优化,有更好的性能表现。操作系统必须确保进程之间的隔离,以防止一个进程的错误影响其他进程。
2025-02-12 21:12:37
1206
原创 xv6: a simple, Unix-like teaching operating system笔记
本章的其余部分概述了 xv6 的服务——进程、内存、文件描述符、管道和文件系统——并用代码片段和讨论说明了如何使用这些服务,特别是 Unix 的命令行用户界面——shell。并且xv6采用时间片轮转调度(其他更为复杂的系统则为了更好的性能表现采取更为复杂的调度方式),才进程不可执行或者发生陷阱(中断等)时,xv6会保存其cpu寄存器,以便下次运行时读取之前的进程状态。尽管子进程最初与父进程具有相同的内存内容,但父进程和子进程是使用不同的内存和不同的寄存器执行的:在一个进程中更改变量不会影响另一个进程。
2025-02-11 21:54:47
1858
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人