<>操作系统实战笔记(一)

<>操作系统是计算机的核心软件

* 操作系统是所有软件的基础,所有上层软件都要依赖于操作系统提供的各种机制,才能运行。
* 后端工程师在做高性能服务端编程的时候,内存、进程、线程、I/O
相关的知识会经常用到。还有,在做一些前端层面的性能调优时,操作系统相关的一些知识更是必不可少。
* 除了 Web
开发,做高性能计算超级计算机的时候,操作系统内核相关的开发能力也至关重要。其实,即使单纯的操作系统内核相关的开发能力,对于工程师来说也是绕不过的基本功。
*
除了工作,操作系统离我们的生活也并不遥远,甚至可以说是息息相关。要知道,操作系统其实不仅仅局限于手机和电脑,你的智能手表、机顶盒、路由器,甚至各种家电中都运行着各种各样的操作系统。
<>程序的运行过程:从代码到机器运行

<>第一版 Hello World
#include "stdio.h" int main(int argc, char const *argv[]) { printf("Hello
World!\n"); return 0; }
* 计算机硬件是无法直接运行这个 C 语言文本程序代码的,需要 C 语言编译器,把这个代码编译成具体硬件平台的二进制代码。
* 再由具体操作系统建立进程,把这个二进制文件装进其进程的内存空间中,才能运行。
<>程序编译过程

* 使用命令:gcc HelloWorld.c -o HelloWorld 或者 gcc ./HelloWorld.c -o ./HelloWorld
,就可以编译这段代码。
* GCC 只是完成编译工作的驱动程序,它会根据编译流程分别调用预处理程序、编译程序、汇编程序、链接程序来完成具体工作。
* HelloWorld 编译流程如下:

* HelloWorld 研究中间过程:
* 预处理
* 加入头文件,替换宏。
* gcc HelloWorld.c -E -o HelloWorld.i。
* 编译
* 包含预处理,将 C 程序转换成汇编程序。
* gcc HelloWorld.c -S -c -o HelloWorld.s。
* 汇编
* 包含预处理和编译,将汇编程序转换成可链接的二进制程序。
* gcc HelloWorld.c -c -o HelloWorld.o。
* 链接
* 包含以上所有操作,将可链接的二进制程序和其它别的库链接在一起,形成可执行的程序文件。
* gcc HelloWorld.c -o HelloWorld。
<>程序装载执行

* 冯诺依曼体系结构:
* 根据冯诺依曼体系结构构成的计算机,必须具有如下功能:
* 把程序和数据装入到计算机中;
* 必须具有长期记住程序、数据的中间结果及最终运算结果;
* 完成各种算术、逻辑运算和数据传送等数据加工处理;
* 根据需要控制程序走向,并能根据指令控制机器的各部件协调操作;
* 能够按照要求将处理的数据结果显示给用户。
* 为了完成上述的功能,计算机必须具备五大基本组成部件:
* 装载数据和程序的输入设备;
* 记住程序和数据的存储器;
* 完成数据加工处理的运算器;
* 控制程序执行的控制器;
* 显示处理结果的输出设备。
<>实现一个最简单的内核(理论篇)

<>PC 机的引导流程

* 我们学习操作系统的时候,不妨撇开其它现有的操作系统,基于硬件,写一个最小的操作系统——Hello OS,直观感受一下。
* 写操作系统要用汇编和 C 语言,尽管这个 Hello OS 很小,但也要用到两种编程语言。
* 为了大大降低我们开始的难度,也不至于打消热情,我们不打算从 PC 的引导程序开始写起,而是先借用一下 GRUB 引导程序,只要我们的 PC 机上安装了
Ubuntu Linux 操作系统,GRUB 就已经存在了。
* Hello OS 的引导流程如下:

* PC 机 BIOS 固件是固化在 PC 机主板上的 ROM 芯片中的,掉电也能保存。
* PC 机上电后的第一条指令就是 BIOS 固件中的,它负责检测和初始化 CPU、内存及主板平台,然后加载引导设备(大概率是硬盘)中的第一个扇区数据到
0x7c00 地址开始的内存空间,再接着跳转到 0x7c00 处执行指令。
* 这就是 GRUB 引导程序。
<>Hello OS 引导汇编代码

* C 作为通用的高级语言,不能直接操作特定的硬件,而且 C 语言的函数调用、函数传参,都需要用栈。
* 栈就是数据满足后进先出特性的一块内存空间,它由 CPU 特定的栈寄存器指向,所以我们要先用汇编代码处理好 C 语言的工作环境。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信