《操作系统真象还原》——0.5 应用程序是什么,和操作系统是如何配合到一起的

简介: 应用程序是软件(似乎是废话,别急,往后看),操作系统也是软件。CPU会将它们一视同仁,甚至,CPU不知道自己在执行的程序是操作系统,还是一般应用软件,CPU只知道去cs:ip寄存器中指向的内存取指令并执行,它不知道什么是操作系统,也无需知道。

本节书摘来自异步社区《操作系统真象还原》一书中的第0章,第0.5节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看

0.5 应用程序是什么,和操作系统是如何配合到一起的

应用程序是软件(似乎是废话,别急,往后看),操作系统也是软件。CPU会将它们一视同仁,甚至,CPU不知道自己在执行的程序是操作系统,还是一般应用软件,CPU只知道去cs:ip寄存器中指向的内存取指令并执行,它不知道什么是操作系统,也无需知道。

操作系统是人想出来的,为了让自己管理计算机方便而创造出来的一套管理办法。

应用程序要用某种语言编写,而语言又是编译器来提供的。其实根本就没有什么语言,有的只是编译器。是编译器决定怎样解释某种关键字及某种语法。语言只是编译器和大家的约定,只要写入这样的代码,编译器便将其翻译成某种机器指令,翻译成什么样取决于编译器的行为,和语言无关,比如说C语言的printf函数,它的功能不是说一定要把字符打印到屏幕上,这要看编译器对这种关键字的处理。

编译器提供了一套库函数,库函数中又有封装的系统调用,这样的代码集合称之为运行库。C语言的运行库称为C运行库,就是所谓的CRT(C Runtime Library)。

应用程序加上操作系统提供功能才算是完整的程序。由于有了操作系统的支持,一些现成的东西已经摆在那了,但这些是属于操作系统的,不是应用程序的,所以咱们平时所写的应用程序只是半成品,需要调用操作系统提供好的函数才能完整地做成一件事,而这个函数便是系统调用。

用户态与内核态是对CPU来讲的,是指CPU运行在用户态(特权3级)还是内核态(特权0级),很多人误以为是对用户进程来讲的。

用户进程陷入内核态是指:由于内部或外部中断发生,当前进程被暂时终止执行,其上下文被内核的中断程序保存起来后,开始执行一段内核的代码。是内核的代码,不是用户程序在内核的代码,用户代码怎么可能在内核中存在,所以“用户态与内核态”是对CPU来说的。

当应用程序陷入内核后,它自己已经下CPU了,以后发生的事,应用程序完全不知道,它的上下文环境已经被保存到自己的0特权级栈中了,那时在CPU上运行的程序已经是内核程序了。所以要清楚,内核代码并不是成了应用程序的内核化身,操作系统是独立的部分,用户进程永远不会因为进入内核态而变身为操作系统了。

应用程序是通过系统调用来和操作系统配合完成某项功能的,有人可能会问:我写应用程序时从来没写什么系统调用的代码啊。这是因为你用到的标准库帮你完成了这些事,库中提供的函数其实都已经封装好了系统调用,你需要跟下代码才会看到。其实也可以跨过标准库直接执行系统调用,对于Linux系统来说,直接嵌入汇编代码“int 0x80”便可以直接执行系统调用,当然要提前设置好系统调用子功能号,该子功能号用寄存器eax存储。

会不会有人又问,编译器怎么知道系统调用接口是什么,哈哈,您想啊,下载编译器时,是不是要选择系统版本,编译器在设计时也要知道自己将来运行在哪个系统平台上,所以这都是和系统绑定好的,各个操作系统都有自己的系统调用号,编译器厂商在代码中已经把宿主系统的系统调用号写死了,没什么神奇的。

相关文章
|
18天前
|
存储 Unix 程序员
面试题:Ctrl + C在不同操作系统下的应用
字节跳动面试题:Ctrl + C在不同操作系统下的应用
35 1
|
2月前
|
存储 弹性计算 安全
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(1)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(1)
335 1
|
6月前
|
存储 缓存 Linux
操作系统与内核、系统编程与应用编程
操作系统与内核、系统编程与应用编程
62 0
|
2月前
|
JavaScript 前端开发 开发者
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性
61 0
|
2月前
|
存储 弹性计算 安全
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
665 1
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
|
2月前
|
弹性计算 运维 监控
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(3)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(3)
340 1
|
2月前
|
Unix Linux iOS开发
操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
56 0
|
2月前
|
Rust 安全 开发者
Rust在操作系统组件开发中的应用:设备驱动与系统服务
本文探讨了Rust在系统级开发中的潜力,特别是针对操作系统组件如设备驱动和系统服务的开发。我们将分析Rust为何适合这些任务,展示其在实际项目中的应用,并讨论其面临的挑战和未来的可能性。
|
4月前
|
存储 编译器 Linux
操作系统相关问题——应用程序和操作系统怎么配合
应用程序和操作系统都是软件, CPU会将它们一视同仁,甚至CPU不知道自己在执行的程序是操作系统还是一般应用软件。CPU只知道去cs:ip寄存器中指向的内存取出指令并执行,它不知道什么是操作系统。
|
5月前
|
安全 物联网 Linux
车载操作系统的物联网应用
车载操作系统的物联网应用
111 0