提交 8c8767f3 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!246 Fix the bug of new blogs.Replace the resource from CDN to local resource.

Merge pull request !246 from ZhengyuhangHans/master0806
...@@ -122,7 +122,7 @@ openEuler是基于Linux 内核的企业级Linux服务器操作系统平台的开 ...@@ -122,7 +122,7 @@ openEuler是基于Linux 内核的企业级Linux服务器操作系统平台的开
在上面这张表中,有两个重要的项目对Linux的诞生产生了重要的影响,它们是Unix系统和GNU项目。在下面两篇连载中,我们将简要介绍Unix系统和GNU项目。下图展示了与Linux有关的操作系统发展史: 在上面这张表中,有两个重要的项目对Linux的诞生产生了重要的影响,它们是Unix系统和GNU项目。在下面两篇连载中,我们将简要介绍Unix系统和GNU项目。下图展示了与Linux有关的操作系统发展史:
<img src="/zh/blog/luoyuzhe/002History-of-Linux-kernel/Linux-OS-history.jpg"> <img src="/zh/blog/luoyuzhe/002History-of-Linux-kernel-1/Linux-OS-history.jpg">
### 四、结语 ### 四、结语
......
...@@ -47,7 +47,7 @@ UNIX System V Release 4发布后不久,AT&T就将其所有UNIX权利出售给 ...@@ -47,7 +47,7 @@ UNIX System V Release 4发布后不久,AT&T就将其所有UNIX权利出售给
下图以树状图的形式展示了从UNIX系统衍生出的各种操作系统[2]: 下图以树状图的形式展示了从UNIX系统衍生出的各种操作系统[2]:
<img src="/zh/blog/luoyuzhe/003History-of-Linux-kernel-2/ Derivate-OS-of-NUIX.gif"> <img src="/zh/blog/luoyuzhe/003History-of-Linux-kernel-2/Derivate-OS-of-NUIX.gif">
### 二、总结 ### 二、总结
......
...@@ -21,15 +21,15 @@ Linux内核的Kernel Map从功能上将Linux内核划分为不同功能的区域 ...@@ -21,15 +21,15 @@ Linux内核的Kernel Map从功能上将Linux内核划分为不同功能的区域
针对所有硬件资源的使用,在用户态程序看来都是一系列的系统调用,这些系统调用展示在user space interface层,例如对于进程来说有fork、execve等系统调用,分别用于创建新的进程和运行可执行文件等;而对于文件系统则有read和write等系统调用,用于读写文件等。Linux系统可以通过执行软中断将系统控制权交给内核,内核可以执行不同的系统调用再将结果返回[2]。下表列出了**Linux内核各系统调用的基本功能**[2]: 针对所有硬件资源的使用,在用户态程序看来都是一系列的系统调用,这些系统调用展示在user space interface层,例如对于进程来说有fork、execve等系统调用,分别用于创建新的进程和运行可执行文件等;而对于文件系统则有read和write等系统调用,用于读写文件等。Linux系统可以通过执行软中断将系统控制权交给内核,内核可以执行不同的系统调用再将结果返回[2]。下表列出了**Linux内核各系统调用的基本功能**[2]:
<img src="/zh/blog/luoyuzhe/006Linux-kernel-source-structure-2/Kernel-6-2.png"> <img src="/zh/blog/luoyuzhe/006Linux-kernel-source-structure-2/Kernel-6-2.jpg">
硬件设备之上是设备驱动程序,驱动程序能控制硬件设备上的微控制器,如磁盘的磁盘控制器,来达到控制硬件设备的目的。然而,在高层的系统调用和设备驱动程序之间有着很大的鸿沟,需要用不同级别的软件抽象来实现。以用于管理磁盘的文件系统为例,对用户程序来说,只需要关注一般的读写功能统一函数接口就可以了,而不需要关注具体使用的是什么样的文件系统,例如是Ext2还是Ext4文件系统,这是因为虚拟文件系统(VFS)对这些不同的文件系统进行了统一的抽象。虚**拟文件系统与具体的文件系统的关系**如下图所示[3]: 硬件设备之上是设备驱动程序,驱动程序能控制硬件设备上的微控制器,如磁盘的磁盘控制器,来达到控制硬件设备的目的。然而,在高层的系统调用和设备驱动程序之间有着很大的鸿沟,需要用不同级别的软件抽象来实现。以用于管理磁盘的文件系统为例,对用户程序来说,只需要关注一般的读写功能统一函数接口就可以了,而不需要关注具体使用的是什么样的文件系统,例如是Ext2还是Ext4文件系统,这是因为虚拟文件系统(VFS)对这些不同的文件系统进行了统一的抽象。虚**拟文件系统与具体的文件系统的关系**如下图所示[3]:
<img src="/zh/blog/luoyuzhe/006Linux-kernel-source-structure-2/Kernel-6-3.png"> <img src="/zh/blog/luoyuzhe/006Linux-kernel-source-structure-2/Kernel-6-3.jpg">
以Ext2文件系统的写数据为例,在调用用户态的write()接口的时候,需要传入文件描述符。内核根据文件描述符找到file,然后调用函数接口(file-\>fop-\>write)将数据写入文件。其中file结构体的fop指针就是在打开文件的时候通过inode初始化的[3]。这个过程如下图所示: 以Ext2文件系统的写数据为例,在调用用户态的write()接口的时候,需要传入文件描述符。内核根据文件描述符找到file,然后调用函数接口(file-\>fop-\>write)将数据写入文件。其中file结构体的fop指针就是在打开文件的时候通过inode初始化的[3]。这个过程如下图所示:
<img src="/zh/blog/luoyuzhe/006Linux-kernel-source-structure-2/Kernel-6-4.png"> <img src="/zh/blog/luoyuzhe/006Linux-kernel-source-structure-2/Kernel-6-4.jpg">
此外,从Kernel Map中可以看出,有一些对系统资源抽象的重要功能,如进程/线程的调度,也在Kernel Map的中间层实现。注意在Linux中,进程和线程都是由task_struct数据结构来管理的,它们的区别在于线程间共享虚拟地址空间而进程的内存资源互相独立[4]。内核从靠近硬件的底层到靠近用户程序的高层,抽象程度逐渐提升,实现了提供给用户程序的各种硬件资源抽象和使用它们所需要的公共功能,最终抽象为系统调用供用户程序使用。内核程序一般运行在CPU的特权级别,可以访问系统的所有资源,而用户态程序运行在CPU的用户级别下,只能访问其进程的资源,这种设计增加了系统的稳定性。 此外,从Kernel Map中可以看出,有一些对系统资源抽象的重要功能,如进程/线程的调度,也在Kernel Map的中间层实现。注意在Linux中,进程和线程都是由task_struct数据结构来管理的,它们的区别在于线程间共享虚拟地址空间而进程的内存资源互相独立[4]。内核从靠近硬件的底层到靠近用户程序的高层,抽象程度逐渐提升,实现了提供给用户程序的各种硬件资源抽象和使用它们所需要的公共功能,最终抽象为系统调用供用户程序使用。内核程序一般运行在CPU的特权级别,可以访问系统的所有资源,而用户态程序运行在CPU的用户级别下,只能访问其进程的资源,这种设计增加了系统的稳定性。
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<link rel="stylesheet" href="{{ "css/comment.css" | absURL }}" /> <link rel="stylesheet" href="{{ "css/comment.css" | absURL }}" />
<div id="vcomments"></div> <div id="vcomments"></div>
<script src="//cdn1.lncld.net/static/js/4.0.4/av-min.js"></script> <script src="//cdn1.lncld.net/static/js/4.0.4/av-min.js"></script>
<script src='//unpkg.com/valine/dist/Valine.min.js'></script> <script src="{{ .Site.BaseURL }}js/Valine.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
new Valine({ new Valine({
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册