Computer-Science-from-the-Bottom-Up-Note-1
Computer Science from the Bottom Up Notes-1
看到一本很好的书,链接,感觉对自己的安全基础很有帮助。
General Unix and Advanced C
Linux 或 BSD 等类 UNIX 系统的原则:一切皆文件。
抽象与API实现
Linux源码中经常出现,如下所示:
1 |
|
在来看一个例子virtio.h:
1 | struct virtio_driver { |
这与上方的greet_api是类似的,都写了期望提供的函数。UNIX平台的标准库一般被称为libc。它提供了系统的基本接口:read()、write()和printf()等基本调用,这个API由一个名为POSIX的规范完整描述。
文件描述符
每个运行的程序开始时都有三个已经打开的文件:标准输入、标准输出、标准错误。
打开文件使用open API,其返回文件描述符
,本质上是内核存储的文件描述符表的索引
。内核创建文件描述符
以响应open调用,并将文件描述符
与底层类似文件的对象的某种抽象
相关联,该对象可以是实际的硬件设备、文件系统。操作系统要求程序员创建设备驱动程序,以便能够与硬件设备通信,设备驱动提供了由内核调用的一系列函数。如下图所示:驱动程序提供了一个read write函数,驱动程序知道如何将这些通用请求转换为特定设备的特定请求
。
内核通过称为设备层
的东西提供了文件接口。主机上的物理设备由特殊文件系统/dev
中的文件表示。设备节点有主要和次要编号(/dev/null
、/dev/zero
、/dev/tty
),这允许内核将特定节点与底层驱动程序相关联。
当文件被打开时,内核使用路径信息将文件描述符映射到提供读写功能的东西上,具体而言,文件描述符会定位到挂载点,挂载点下打开的文件可以被定向到系统文件驱动程序。
理解内核就是理解API是如何相互关联和共存的
。
shell例如bash、zsh、csh,它们可以帮助用户与操作系统交互。一些shell数据传递方式如下:
例如ls|more
,其不是将标准输出的文件描述符与某种底层设备(如控制台,用于输出到终端)相关联,而是将描述符指向内核提供的内存缓冲区,通常称为管道。
Binary and Number Representation
留言
- 文章链接: https://wd-2711.tech/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!