从零实现一个操作系统(一)
操作系统实战笔记(一)
操作系统是计算机的核心软件
-
操作系统是所有软件的基础,所有上层软件都要依赖于操作系统提供的各种机制,才能运行。 后端工程师在做高性能服务端编程的时候,内存、进程、线程、I/O 相关的知识会经常用到。还有,在做一些前端层面的性能调优时,操作系统相关的一些知识更是必不可少。 除了 Web 开发,做高性能计算超级计算机的时候,操作系统内核相关的开发能力也至关重要。其实,即使单纯的操作系统内核相关的开发能力,对于工程师来说也是绕不过的基本功。 除了工作,操作系统离我们的生活也并不遥远,甚至可以说是息息相关。要知道,操作系统其实不仅仅局限于手机和电脑,你的智能手表、机顶盒、路由器,甚至各种家电中都运行着各种各样的操作系统。
程序的运行过程:从代码到机器运行
第一版 Hello World
#include "stdio.h" int main(int argc, char const *argv[]) { printf("Hello World! "); 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。
程序装载执行
-
冯诺依曼体系结构: 根据冯诺依曼体系结构构成的计算机,必须具有如下功能: 把程序和数据装入到计算机中; 必须具有长期记住程序、数据的中间结果及最终运算结果; 完成各种算术、逻辑运算和数据传送等数据加工处理; 根据需要控制程序走向,并能根据指令控制机器的各部件协调操作; 能够按照要求将处理的数据结果显示给用户。 为了完成上述的功能,计算机必须具备五大基本组成部件: 装载数据和程序的输入设备; 记住程序和数据的存储器; 完成数据加工处理的运算器; 控制程序执行的控制器; 显示处理结果的输出设备。
下一篇:
大型机半个世纪发展史