9.5 UNIX系统调用
L55
学习目标
UNIX系统调用按功能分为进程控制、文件操纵、进程通信和信息保护等类型,是UNIX内核服务用户的接口。
- 进程控制类系统调用:fork(创建)、exec(替换)、exit(终止)、wait(等待)等。
- 文件操纵类系统调用:open(打开)、read/write(读写)、close(关闭)、link/unlink(连接/去连接)等。
- 进程通信类系统调用:pipe(管道)、msgget/msgsnd/msgrcv(消息队列)、shmat/shmdt(共享内存)等。
- 信息保护类系统调用:chmod(改权限)、chown(改属主)、getuid/setuid(获取/设置用户ID)等。
原理 · 深入理解
9.5.1 进程控制
其它进程调用:用于获取进程或用户标识,以及让进程主动暂停。
- 获得进程 ID
- 获得用户 ID
- 进程暂停(pause)
改变进程映像和等待
- 执行一个文件(exec)
- 等待子进程结束(wait)
其它进程调用
- 获得进程ID
- 获得用户ID
- 进程暂停(pause)
9.5.2 文件操纵
建立与文件的连接和去连接:link 用于为一个已存在文件建立一个新的目录项(硬链接),unlink 用于删除目录项;当连接计数降为 0 时文件实际被删除。
- 连接(link)
- 去连接(unlink)
文件的读和写:read 和 write 是两个最常用的系统调用,都要求用户提供三个输入参数。
- 文件描述符 fd
- buf 缓冲区首址:对读是信息传送的目标地址,对写是信息传送的源地址
- 用户要求传送的字节数 nbyte
文件操纵的系统调用参数:文件描述符 fd、buf 缓冲区首址(读时为目标地址,写时为源地址)、要求传送的字节数 nbyte。
- 连接(link)
- 去连接(unlink)
9.5.3 进程通信和信息保护
信息维护:UNIX 系统中设置了许多条用于系统维护的系统调用。
- 设置和获得时间
- 获得进程和子进程时间(times)
- 设置文件访问和修改时间(utime)
- 获得当前 UNIX 系统的 I was cut off again. Let me continue from where I left off. I need to be careful about token limits. Let me continue writing the remaining entries. I'll try to keep going. 名称(uname)
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
UNIX系统调用
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能说明用户态不能直接访问设备寄存器的原因。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
延伸思考
- 全部函数都链进固件时,还有「用户/内核」边界吗?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?