目录
摘要:高级编程语言中的系统调用和可移植性。 操作系统的硬件控制功能通常以小型功能集合的形式提供。 这是因为控制硬件是用户的唯一责任。 该语言提供的函数用于在命令提示符下显示字符串。
系统调用和高级编程语言可移植性
操作系统的硬件控制功能通常以一小部分功能集合的形式提供。 这些函数以及调用它们的行为统称为系统调用,即应用程序调用操作系统(系统)的函数。 前面的程序使用了time()和printf()等函数,这些函数内部还使用了系统调用。 我在这里使用“内部”一词是因为在Windows操作系统中,提供诸如返回当前日期和时间或在显示器上显示字符串等功能的系统调用的函数名称是time()或printf()。 。 系统调用在 time() 和 printf() 函数内执行。 这个方法可能看起来有点复杂,但这是有原因的。
高级编程语言(例如 C 语言)独立于任何特定操作系统。 这是因为预计几乎相同的源代码可以在 Windows 和 Linux 上使用。 所以,高级编程语言的工作方式是,它们使用自己的函数名称,并在编译时将其翻译成相应的操作系统系统调用(有时是系统调用的组合)。 换句话说,用高级编程语言编写的应用程序经过编译后,会使用系统调用将其转换为本机代码(图 9-6)。
图9-6高级编程语言中的函数调用经过编译后就变成了系统调用。
一些高级编程语言可以直接进行系统调用。 然而,以这种方式创建的应用程序不便于移植①(通常也称为具有恶意行为的应用程序)。 例如,直接调用Windows系统调用的应用程序显然无法在Linux上运行。
PS:①可移植性是指同一个程序在不同操作系统上运行所需的时间。 所需时间越短,就越便携。
Win编译链接机制
应用和硬件没有关系吗?
用C等高级编程语言开发的Windows应用程序很少能够访问直接控制硬件的指令。 这是因为 Windows 独自负责控制硬件。
但是,Windows 提供了通过应用程序间接控制硬件的方法。 可以使用操作系统提供的系统调用函数来进行硬件控制。 在 Windows 中,系统调用称为 API(图 11-1)。 每个 API 都是由您的应用程序调用的函数。 这些函数的实体存储在 DLL 文件中。
图11-1 应用程序通过操作系统间接控制硬件。
让我们看一个使用系统调用间接控制硬件的示例。 例如,如果要在窗口中显示字符串,可以使用Windows API①的TextOut函数。 TextOut 的语法如代码清单 11-1 所示。 该代码实际上没有任何参数来使其了解硬件。 参数hdc,注释为“设备描述表的句柄”,用于指定绘图对象的标识值,例如字符串或图形,并不代表直接的硬件设备。
代码清单11-1 TextOut函数语法(C语言)
BOOL TextOut(HDC hdc, // 指向字符串的指针int cbString // 字符串中的字符数);
那么 Windows 应该怎么做呢?结果表明,虽然Windows作为硬件直接控制显示,但Windows本身也需要作为软件向CPU传递一定的指令,通过软件控制硬件。
补充说明:脚注
① 如果要将字符串输出到 Windows 或打印机,可以使用 Windows 提供的 TextOut 函数作为 API,但不能使用提供的 printf 函数将字符串打印到窗口或打印机。 。
相关推荐
- k8s与configmap--安利configmap-reload组件
- CSTServer:针对中国优化的香港/洛杉矶云服务器、美国裸机仅 19.9 起、Station Cluster 服务器等 40% 折扣。
- 先尝试k8s,通过rancher从上到下学习kubernetes(k8s容器)
- docker/k8s/云
- 野草云十二周年促销,香港云服务器81元/1年(AMD 7002系列),香港AMD轻云188元/2年
- kube-scheduler 调度扩展(k8s 调度器扩展)
- RAKsmart 机房 VPS 起价仅为每小时 0.01 美元,专用服务器起价为 30 美元。 最高收费200美元!
- 基于Docker、Gogs、Jenkins、Kubernetes自动构建并持久化实用工程源码。
- k8s和aws--add-ebs-tags-controller向ebs添加标签(k8s负载均衡)
- k8s安装概述(k8s安装问题)
- CNCF 案例研究:AppDirect
- 适合所有人的 Kubernetes 端到端测试
- SurferCloud VPS:32 美元/月/4 核/8GB 内存/120GB RSSD 硬盘/4TB 流量/30Mbps 端口/洛杉矶/台北/香港/伦敦/越南等。
- 摘要:20190327(如何撰写摘要)
- 开源如何加速NFV转型(NFT开源平台)
- Kubernetes 1.14:对 Windows 节点、Kubectl 更新和持久本地卷的生产级支持普遍可用
评论前必须登录!
注册