参考文档

https://time.geekbang.org/column/article/88060

背景

首先理解硬件只是,再去理解内核与操作系统的环境以及输入输出、进程管理,如下所示:

  • 硬件知识
  • 怎么理解操作系统
  • 硬件的管理
  • 如何理解输入和输出
  • 进程与程序的关系
  • 如何理解系统调用

硬件知识

包括常见的主板、CPU、内存、显卡、硬盘、网卡、显示器、键盘鼠标。有些硬件还对应的提供了驱动程序,例如显卡、网卡、键盘鼠标等。

怎么理解操作系统

操作系统是一种软件各个组件整合的一种体验,内核则是操作系统中最核心的组件。以Linux为例它的内核是由一个专门的组织提供的,而有些组织则针对这个内核版本编写对应的操作系统。

内核与操作系统的关系

OS是一种管理计算机软硬件资源的系统软件,而内核是它的核心。内核可以直接管理硬件资源。

硬件的管理

当我们通过操作系统去管理硬件的时候,并不是操作系统直接管理硬件,而是在内核外层通过系统调用将管理硬件的请求发送至内核,由内核完成这个操作。对于客户而言并不关心是操作系统管理了硬件还是内核管理了硬件。

如何理解输入和输出

通过示例来理解输入和输出常见的一直模式有键盘输入、显示器输出。这样就完成一次输入和输出。这里的输入和输出其实严格来说应该是通过键盘的驱动程序进行输入(数据显示可以理解成需要写一次数据)

进程与程序的关系

当我们将写好的代码编译成一个二进制文件的时候,它就叫进程。当进程被系统调用执行时(进程需要内核的进程管理系统管理,所以会进入内核态,而系统调用就是从用户态转入内核态的一个步骤)而当程序被运行时则叫进程,进程有什么周期。

如何理解系统调用

创建一个进程可以通过clone()、fork()、vfork()这三个系统调用来完成。

  • fork fork创建一个进程时,子进程只是完全复制父进程的资源,复制出来的子进程有自己的task_struck结构和pid,但却复制父进程其它所有的资源
  • vfork vfork系统调用不同于fork,用vfork创建的子进程与父进程共享地址空间,也就是子进程完全运行在父进程的地址空间上,如果这时子进程修改了某个变量,将影响到父进程。
  • clone 系统调用fork()和vfork是无参数,而clone()则带有参数。fork()是全部复制,vfork是共享内存,而clone()则是可以将父进程资源有选择地复制给子进程。

管理一个进程需要涉及多个子系统

进程管理子系统

进程管理子系统主要实现进程的调度、任务管理、同步、CPU

内存管理子系统

虚拟内存管理、内存映射、页表项、swap、伙伴系统、slab、以及管理物理内存

文件子系统

文件子系统保护了VFS虚拟文件系统、缓存、文件系统

网络子系统

包括套接字、协议栈、网络设备

设备子系统

字符设备、块设备

总结

对于第一章节的Linux总结就显得十分费劲,前后花费了近两个小时的时间。而且很多概念及原理都在谷歌查出来后才补上去的。实在是想放弃。

最后修改日期: 2024年4月30日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。