操作系统:系统调用

简介: 系统调用是操作系统提供给应用程序使用的接口,可理解为一种可供应用程序调用的特殊函数。应用程序可以通过系统调用来获取操作系统内核的服务。

一、系统调用概念


系统调用是操作系统提供给应用程序使用的接口,可理解为一种可供应用程序调用的特殊函数。应用程序可以通过系统调用来获取操作系统内核的服务。


二、系统调用和库函数调用的区别


库函数是高级语言编写的,调用库函数时库函数同时也要进行系统调用。


系统调用比库函数调用更加底层。


补充:计算机的层次


最上层:普通应用程序。可进行系统调用,也可以进行库函数调用。


中层:编程语言。向上给应用程序提供库函数,也可以将系统调用封装成库函数,隐藏系统调用的一些细节,方便程序员使用。


下层:操作系统。向上提供系统调用,使得上层应用程序可以获得操作系统内核的服务。


最下层:裸机。


三、系统调用的必要性


假设同时使用应用程序WPS和Word打印两篇论文,两个程序都要使用打印机资源,如果任由这两个应用程序并发运行,共享打印机资源,那么两篇论文将会混杂地打印在一起。


如何解决?


应用程序想要使用打印机资源,必须通过系统调用向操作系统内核发出请求,由操作系统内核对各个请求进行协调处理。(操作系统内核是系统资源的统一管理者,向上层提供系统调用接口)


四、系统调用的过程


应用程序上CPU运行,CPU处于用户态。应用程序向CPU传参,这些参数指明了将要进行的系统调用的类型。传参完成,应用程序向CPU发出陷入指令,陷入指令引发中断信号,CPU转为内核态,相应的中断信号处理程序(内核程序)来处理该中断信号,即系统调用入口程序来处理该中断信号。系统调用入口程序检查应用程序传给CPU的参数,通过参数确定不同类型的系通过调用服务。系统调用完成后,CPU转换为用户态,应用程序继续上CPU运行,执行其他指令。


五、需要进行系统调用的功能


系统中的各种资源都由操作系统内核统一管理,所以凡是需要使用共享资源的操作(存储分配、I/O操作、文件管理等),都必须进行系统调用。


通过系统调用的方式向操作系统内核获取服务,由操作系统内核程序代为完成相关操作,可以保证系统的安全性与稳定性。

目录
相关文章
|
2月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
本文介绍了 Python 在跨平台开发中的强大能力,通过实际例子展示了如何使用 `os` 和 `pathlib` 模块处理文件系统操作,`subprocess` 模块执行外部命令,以及 `tkinter` 创建跨平台的图形用户界面。这些工具和模块帮助开发者轻松应对不同操作系统间的差异,专注于业务逻辑。
55 2
|
3月前
|
网络协议 Linux 调度
深入探索Linux操作系统的心脏:内核与系统调用####
本文旨在揭开Linux操作系统中最为核心的部分——内核与系统调用的神秘面纱,通过生动形象的语言和比喻,让读者仿佛踏上了一段奇妙的旅程,从宏观到微观,逐步深入了解这两个关键组件如何协同工作,支撑起整个操作系统的运行。不同于传统的技术解析,本文将以故事化的方式,带领读者领略Linux内核的精妙设计与系统调用的魅力所在,即便是对技术细节不甚了解的读者也能轻松享受这次知识之旅。 ####
|
3月前
|
缓存 算法 安全
深入理解Linux操作系统的心脏:内核与系统调用####
【10月更文挑战第20天】 本文将带你探索Linux操作系统的核心——其强大的内核和高效的系统调用机制。通过深入浅出的解释,我们将揭示这些技术是如何协同工作以支撑起整个系统的运行,同时也会触及一些常见的误解和背后的哲学思想。无论你是开发者、系统管理员还是普通用户,了解这些基础知识都将有助于你更好地利用Linux的强大功能。 ####
53 1
|
3月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【10月更文挑战第2天】Python 以其卓越的跨平台能力和丰富的标准库,成为解决多操作系统环境下编程挑战的理想选择。本文将通过实际例子展示 Python 如何简化跨平台开发。从文件系统操作到系统调用,再到 GUI 应用开发,Python 提供了多种工具和模块,如 `os`、`pathlib` 和 `subprocess`,帮助开发者轻松应对不同平台间的差异,让你成为真正的跨平台高手。
29 5
|
5月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【8月更文挑战第5天】Python系统调用实战展示了如何轻松应对跨平台挑战。通过`os`与`pathlib`模块处理文件系统操作,如创建目录及获取用户主目录,自动适配不同操作系统的路径格式。利用`subprocess`模块执行外部命令,智能选择`ls`或`dir`等系统特定指令。借助Tkinter创建图形用户界面,实现一次编写到处运行的目标。这些技巧让开发者专注于应用逻辑,简化跨平台开发流程。
60 0
|
8月前
|
Linux C语言
操作系统 | 添加系统调用
操作系统 | 添加系统调用
81 0
|
存储 缓存 Linux
【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
140 1
|
8月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
116 1
|
8月前
|
Linux 开发工具 C语言
【操作系统】实验四 增加Linux系统调用
【操作系统】实验四 增加Linux系统调用
493 1
|
存储
【OS Pintos】用户程序是如何工作的 | Pintos 运行原理 | 虚拟内存 | 页函数 | 系统调用
【OS Pintos】用户程序是如何工作的 | Pintos 运行原理 | 虚拟内存 | 页函数 | 系统调用
354 0