学习笔记
操作系统
内核
计算机从底至上。
冯诺依曼计算机结构:
输入,输出,存储器,运算器,控制器。不管多复杂的程序,可以理解成就是在算加减乘除。
计算机的底层硬件提供了这样的一个计算能力。但是真正要让硬件跑起来,这个时候需要有内核。内核也是一套软件,有自己的代码,有自己的内存,内核的作用就是调动底层的硬件资源,可以支撑上层的应用,给它上面的应用提供硬件资源。
内核往下可以管理硬件资源,往上需要为应用提供访问资源的接口,叫做__系统调用__。
一个应用是一个汉字,系统调用是一笔一划,最最小的一个操作单位了。一次系统调用,会导致底层硬件发生变化。
如果说程序想给某个变量分配内存是一个汉字的话,可能会有很多笔画,对应着多个系统调用。调用多个系统调用对于程序原来说是十分麻烦的,所以库函数做到了对系统调用的封装。库函数就是偏旁。
对于应用程序来说,简单的汉字(简单操作)可以调用系统调用,复杂的汉字可以调函数库。
shell也是对系统调用的封装。一个shell命令可能底层对应了很多的系统调用。
用户态又叫做用户空间
内核态又叫做内核空间
用户态的应用程序可以通过三种方式来访问内核态的资源:
系统调用
库函数
Shell脚本
内核所做的事有一个“全景式”的印象。主要表现为:向下控制硬件资源
向上则向应用程序提供系统调用的接口
从整体上来看,整个操作系统分为两层:用户态和内核态
Unix/Linux的设计哲学之一就是:对不同的操作赋予不同的执行等级,就是所谓特权的概念。
Linux操作系统中主要采用了0和3两个特权级,分别对应的就是内核态和用户态。运行于用户态的进程可以执行的操作和访问的资源都会受到极大的限制,而运行在内核态的进程则可以执行任何操作并且在资源的使用上没有限制。
很多程序开始时运行于用户态,但在执行的过程中,一些操作需要在内核权限下才能执行,这就涉及到一个从用户态切换到内核态的过程。(所以程序的运行级别是会改变的)
比如C函数库中的内存分配函数malloc(),它具体是使用sbrk()系统调用来分配内存,当malloc调用sbrk()的时候就涉及一次从用户态到内核态的切换,类似的函数还有printf(),调用的是wirte()系统调用来输出字符串,等等。
有一些操作指令必须切换到内核态才可以执行。内核态才能去完成操作。切换是需要付出代价的。
到底在什么情况下会发生从用户态到内核态的切换,一般存在以下三种情况:
1)当然就是系统调用:原因如上的分析
2)异常事件
3)外围设备的中断:
一次IO读取的过程。
linux里面是按照1:3的比例分配
用户内存空间:1~3G
内核内存空间:0~1G
系统调用真正操作的都是内核地址空间的数据,所以读取一个文件的时候,需要先将数据读取到内核地址空间,然后在拷贝到用户地址空间。拷贝是比较费时的。
内核态和用户态的切换费时,从内核地址空间拷贝到用户地址空间也是费时的。
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。1
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎