管理操作系统中的对象
管理操作系统中的对象
管理操作系统中的对象
你们看到的教室是真实的吗?
同学 = 进程 (临时重组);共享空间 = 操作系统对象
你的视觉和触觉都必须通过 syscall
我们真的也可能生活在 “虚拟化” 中
管理操作系统中的对象
操作系统对象:进程和地址空间
进程管理
fork, execve, exit
例子:pstree
内存管理
mmap, munmap, mprotect
进程的内存由内存 “页面” 组成
例子:游戏修改器
管理操作系统中的对象
操作系统对象:文件和设备
访问操作系统中的对象
文件:有 “名字” 的对象
字节流 (终端) 或字节序列 (普通文件;包括 /proc/*)
文件描述符
指向操作系统对象的 “指针”
Everything is a file
通过指针可以访问 “一切”
对象的访问都需要指针
open, close, read/write (解引用), lseek (指针内赋值/运算), dup (指针间赋值)
管理操作系统中的对象
Windows 中的文件描述符
Handle (把手;握把;把柄)
比 file descriptor 更像 “指针”
你有一个 “handle” 在我手上,我就可以更好地控制你
管理操作系统中的对象
句柄 (柄 = 握把)
管理操作系统中的对象
操作系统对象:IPC Endpoints
管道:一个特殊的 “文件” (流)
由读者/写者共享
读口:支持 read
写口:支持 write
匿名管道
int
pipe
(
int
pipefd[
2
])
;
返回两个文件描述符
进程同时拥有读口和写口
看起来没用?不,fork 就有用了