操作系统相关问题——应用程序和操作系统怎么配合

简介: 应用程序和操作系统都是软件, CPU会将它们一视同仁,甚至CPU不知道自己在执行的程序是操作系统还是一般应用软件。CPU只知道去cs:ip寄存器中指向的内存取出指令并执行,它不知道什么是操作系统。

应用程序和操作系统都是软件, CPU会将它们一视同仁,甚至CPU不知道自己在执行的程序是操作系统还是一般应用软件。CPU只知道去cs:ip寄存器中指向的内存取出指令并执行,它不知道什么是操作系统。


编程语言其实只是编译器和大家的约定,只要写入这样的代码,编译器便将其翻译成某种机器指令,翻译成什么样取决于编译器的行为。编译器还提供了一套库函数,库函数中又有封装的系统调用,这样的代码集合称之为运行库。C语言的运行库成为C运行库,就是所谓的CRT。应用程序加上操作系统提供的功能才算是完整的程序,平时写的应用程序只能算是半成品,还需要调用操作系统提供的函数才能完整地做出一件事,而这些函数就是系统调用。


用户态和内核态是对CPU来讲的而不是用户进程,是指CPU运行在用户态(特权3级)还是内核态(特权0级)。用户进程陷入内核态是指由于内部或外部中断发生,当前进程被暂时终止执行,其上下文被内核的中断程序保存起来后,开始执行一段内核的代码。是内核的代码而不是用户及程序在内核的代码,用户代码不可能在内核中存在,所以“用户态和内核态”是相对于CPU而言的。当应用程序陷入内核之后,自己已经下CPU了,以后发生的事情应用程序完全不知道,此时它的上下文环境已经被保存到了自己在内核态的的栈中了,CPU上运行的程序已经是内核程序。


也就是说应用程序其实是通过系统调用和操作系统配合来完成某项功能的。可能有人会说自己写应用程序时从来没写过系统调用的代码,这是因为用到的标准库帮我们完成了这些事。库中提供的函数其实都已经封装好了系统调用,需要下载源码才会看到。


其实也可以跨过标准库直接执行系统调用,对于Linux系统来说,直接嵌入汇编代码"int 0x80"便可以直接执行系统调用,当然要提前设置好系统调用的子功能号,该子功能号用寄存器eax存储。


各个操作系统都有自己的系统调用号,所以我们在下载编译器时需要选择正确的系统版本,编译器厂商在代码中已经把宿主系统的系统调用号写死了。

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
自然语言处理 安全 Windows
第九章 操作系统接口【操作系统】1
第九章 操作系统接口【操作系统】1
202 1
|
20天前
|
存储 运维 安全
深入理解操作系统:设计与实现的全面指南
【10月更文挑战第2天】 本文旨在为读者提供关于操作系统设计原理及其实现的深入理解。操作系统作为计算机系统的核心,其设计直接影响着整个系统的性能和稳定性。本文将详细介绍操作系统的基本概念、主要功能以及设计过程中需要考虑的关键因素。通过阅读本文,读者将能够获得对操作系统工作原理的清晰认识,并了解如何设计一个高效、可靠的操作系统。
|
23天前
|
安全 中间件 人机交互
探索操作系统:从内核到用户界面的全面解析
本文旨在深入探讨操作系统的本质、核心组件及其功能。通过分析操作系统的各个层次,包括内核、驱动程序、中间件及用户界面,揭示其背后的技术原理和设计思想。此外,本文还将讨论操作系统在现代计算中的重要性及其未来发展趋势。
|
3月前
|
前端开发 Ubuntu 安全
部署在什么操作系统上比较好
【8月更文挑战第25天】部署在什么操作系统上比较好
59 3
|
4月前
操作系统的主要功能
操作系统的主要功能
|
6月前
|
存储 程序员
操作系统(1)----操作系统的运行机制
操作系统(1)----操作系统的运行机制
63 0
|
人工智能 JavaScript 前端开发
「操作系统」1. 基础
「操作系统」1. 基础
|
6月前
|
Linux Android开发 iOS开发
操作系统的作用与常见操作系统介绍
操作系统的作用与常见操作系统介绍
|
6月前
|
存储 编译器 Linux
操作系统相关问题——应用程序和操作系统怎么配合
应用程序和操作系统都是软件, CPU会将它们一视同仁,甚至CPU不知道自己在执行的程序是操作系统还是一般应用软件。CPU只知道去cs:ip寄存器中指向的内存取出指令并执行,它不知道什么是操作系统。
|
11月前
|
调度 Windows
【操作系统】—操作系统的概念 目标和功能
【操作系统】—操作系统的概念 目标和功能