操作系统概念学习笔记 6 系统调用

简介:

操作系统概念学习笔记 6

系统调用



系统调用

系统调用(system call),通常用c或c++编写,对底层任务(如需直接访问硬件)可能以汇编语言指令的形式提供。

一个系统调用的例子:
编写一个从一个文件读取数据并复制到另一个文件的简单程序,则需要以下系统调用序列:

获取输入文件名:

  • 屏幕输入提示
  • 接收输入

获取输出文件名:

  • 屏幕输入提示
  • 接收输入

打开输入文件:

  • 如果文件不存在,放弃

loop:

  • 读取输入文件
  • 写入输出文件

直到读取失败
关闭输出文件
将完成信息输出到屏幕
正常结束

然而, 一般程序开发人员根据应用程序接口(API)设计程序,有三种常用的API:

1.适用于windows系统的win32 API

2.适用于POSIX系统的POSIX API(包括UNIX、Linux 和Mac OS X 版本)

3.设计运行于java虚拟机程序的java API

在后台,组成API的函数通常为应用程序员调用实际的系统调用。

向操作系统传递参数有三种方法

  1. 最简单的是通过寄存器来传递参数

  2. 不过有时参数数量会比寄存器多。这时,这些参数通常存在内存的块和表中,并将块的地址通过寄存器来传递。linux采用这样的方法。

  3. 参数还可压入堆栈中,并通过操作系统弹出。

系统调用类型

系统调用大致可分五类:进程控制、文件管理、、设备管理、信息维护、通信

  • 进程控制
    • 结束,放弃
    • 装入执行
    • 创建进程,终止进程
    • 取得进程属性,设置进程属性
    • 等待时间
    • 等待事件,唤醒事件
    • 分配与释放内存
  • 文件管理
    • 创建文件,删除文件
    • 打开,关闭
    • 读,写,重定位
    • 取得文件属性,设置文件属性
  • 设备管理
    • 请求设备,释放设备
    • 读,写,重定位
    • 取得设备属性,设置设备属性
    • 逻辑连接或断开设备
  • 信息维护
    • 读取时间和日期,设置时间或日期
    • 读取系统数据,设置系统数据
    • 读取进程,文件或设备属性
    • 设置进程,文件或这杯属性
  • 通信
    • 创建,删除通信系统
    • 发送,接受消息
    • 传递状态消息
    • 链接或者断开远程设备

进程控制

运行程序需要能正常或非正常地中断其执行(end或abort)

如果一个系统调用被用来非正常的中断执行程序,或者程序运行碰到问题引起错误陷阱,那么可能会有内存信息转储并产生一个错误信息。内存信息转储通常写到磁盘上,并被调试器(帮助程序员发现和检查错误的系统程序)检查和确定问题原因。操作系统必须将控制权转交给命令解释器。命令解释器紧接着读取下一个命令。

对于交互系统:
命令解释器简单的读取下一个命令,因为假定用户会采取合适的命令处理错误

对于GUI系统:
一个弹出窗口提醒错误并提个建议

对于批处理系统:
命令解释器终止整个作业并继续下一个作业。出现错误时,有的系统允许控制卡指出一个具体的恢复动作。控制卡是一个批处理概念,他是一个管理进程执行的命令。可定义一个错误级别。更加严重的错误可用更高级的错误参数来表示。命令解释器和下一个程序能利用错误级别自动决定下一个动作。

执行一个程序或作业可能需要装入另一个程序。这一点允许命令解释器来执行一个程序,该命令可通过用户命令,鼠标单机和批处理命令来表示。当装入程序终止时:

如果新程序终止时控制权返回到现有程序,那么必须保存现有程序的内存映像。因此,实际上建立一个机制以便一个程序调用另一个程序。如果两个程序并发继续,那么创建了一个新作业和进程以便多道执行。有的系统调用专门用于这一目的(create process 或 submit job)

如果创建新作业和进程,那么应该能够控制他的执行。这种控制要求能决定和重置进程或作业的属性,包括优先级、最大允许执行时间等。必要时也要能终止它。

另一组系统调用有助于调试程序,许多系统提供转储内存信息的系统调用,这有助于调试程序,程序trace在执行时能列出所用的每条执行的指令,但是只有少数几类系统提供。

许多操作系统提供时间表来表示一个程序在某个位置执行的时间。时间表要求具有跟踪功能或定时 时间中断。每次定时中断,会记录计数器的值。

文件管理

常用的文件管理系统调用:

首先能创建和删除文件。每个系统调用需要文件名,可能还会需要一些文件属性。创建文件滞后,就需要打开并使用,也可能需要读,写,重定位,最后需要关闭文件。

使用目录来组织文件系统中的文件,目录也需要相同的操作。

另外,还至少需要读取文件属性和设置文件属性,有的操作系统提供更多调用,如文件移动和复制。

其余的,一部分可能提供采用代码或系统调用完成这些操作的API,另一部分可能仅提供完成这些任务的系统程序。

如果系统程序被其他程序所调用,则其中每一个军可以被其他系统调用视为一个API

设备管理

程序在执行时需要用到一些资源才能继续运行,否则,程序必须等待可用的足够多的资源。

操作系统控制的不同资源可当做设备看待,这些设备有些是物理设备(磁带),而其他可当做抽象或虚拟的设备(如文件)。如果系统有多个用户,那么用户必须请求设备以确保能独自使用它。在使用完设备之后,用户需要释放它。

一旦请求了设备(并且得到设备之后),就能如同对待文件一样对设备进行读,写,重定位。I/O与文件非常相似,以至于许多操作系统(如UNIX)将这两者合并为文件-设备结构。

信息维护

许多系统调用用来在用户程序和操作系统间传递信息,调用返回的信息可能是系统版本、空闲内存、进程信息等

另外,操作系统维护所有进程的信息,有些操作系统调用可访问这些信息。

通信

有两种模型:

消息传递模型和共享内存模型。
对于消息传递模型,通信进程彼此交换消息来交换信息。

对于共享内存模型,进程使用 shared memory create 和 shared memory attach系统调用来获得其他进程所拥有的内存区域的访问权。

系统程序

计算机的逻辑层次中,最底层是硬件,上面是操作系统,接着是系统程序,最后是应用程序。

系统程序提供了一个方便的环境,以开发程序和执行程序。其中一小部分指示系统调用的简单接口没其他可能是相当复杂的。
它们可分为:

文件管理、状态信息、文件修改、程序语言支持、程序装入和执行、通信

目录
相关文章
|
13天前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
本文介绍了 Python 在跨平台开发中的强大能力,通过实际例子展示了如何使用 `os` 和 `pathlib` 模块处理文件系统操作,`subprocess` 模块执行外部命令,以及 `tkinter` 创建跨平台的图形用户界面。这些工具和模块帮助开发者轻松应对不同操作系统间的差异,专注于业务逻辑。
30 2
|
20天前
|
安全 算法 Unix
深入浅出操作系统:从基础概念到实践应用
【10月更文挑战第22天】本文旨在以浅显易懂的语言,为读者揭开操作系统的神秘面纱。我们将从操作系统的基本概念出发,逐步深入其核心功能与设计哲学,并通过具体代码示例,展示操作系统如何在实际中发挥作用。无论你是计算机科学的学生,还是对技术有浓厚兴趣的爱好者,这篇文章都将为你提供一次轻松愉快的操作系统之旅。
33 4
|
25天前
|
网络协议 Linux 调度
深入探索Linux操作系统的心脏:内核与系统调用####
本文旨在揭开Linux操作系统中最为核心的部分——内核与系统调用的神秘面纱,通过生动形象的语言和比喻,让读者仿佛踏上了一段奇妙的旅程,从宏观到微观,逐步深入了解这两个关键组件如何协同工作,支撑起整个操作系统的运行。不同于传统的技术解析,本文将以故事化的方式,带领读者领略Linux内核的精妙设计与系统调用的魅力所在,即便是对技术细节不甚了解的读者也能轻松享受这次知识之旅。 ####
|
22天前
|
缓存 算法 安全
深入理解Linux操作系统的心脏:内核与系统调用####
【10月更文挑战第20天】 本文将带你探索Linux操作系统的核心——其强大的内核和高效的系统调用机制。通过深入浅出的解释,我们将揭示这些技术是如何协同工作以支撑起整个系统的运行,同时也会触及一些常见的误解和背后的哲学思想。无论你是开发者、系统管理员还是普通用户,了解这些基础知识都将有助于你更好地利用Linux的强大功能。 ####
34 1
|
1月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【10月更文挑战第2天】Python 以其卓越的跨平台能力和丰富的标准库,成为解决多操作系统环境下编程挑战的理想选择。本文将通过实际例子展示 Python 如何简化跨平台开发。从文件系统操作到系统调用,再到 GUI 应用开发,Python 提供了多种工具和模块,如 `os`、`pathlib` 和 `subprocess`,帮助开发者轻松应对不同平台间的差异,让你成为真正的跨平台高手。
16 5
|
1月前
|
Ubuntu Java Linux
Linux操作系统——概念扫盲I
Linux操作系统——概念扫盲I
43 4
|
2月前
|
存储 算法 安全
深入理解操作系统:从基础概念到代码实践
【9月更文挑战第23天】本文将带领读者深入探索操作系统的奥秘,从基础概念出发,逐步揭示操作系统的工作原理和设计哲学。我们将通过实际代码示例,展示操作系统如何与硬件交互、管理资源以及提供用户界面。无论你是计算机专业的学生还是对操作系统感兴趣的开发者,这篇文章都将为你打开一扇通往操作系统世界的大门。
67 16
|
6月前
|
存储 缓存 Linux
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
|
4月前
|
人工智能 Unix 物联网
深入理解操作系统:从概念到实践
【7月更文挑战第31天】本文将带领读者深入探索操作系统的世界,从基本概念、发展历程、核心组件,到实际应用场景和未来趋势。我们将揭示操作系统如何作为软件与硬件之间的桥梁,以及它如何影响计算机系统的性能和用户体验。通过本文,您将获得对操作系统设计哲学的深刻理解,并掌握评估不同操作系统特性的能力。
76 7
|
4月前
|
算法 安全 Linux
深入理解操作系统:从基础概念到现代发展
【7月更文挑战第25天】在数字时代的心脏,操作系统(OS)扮演着至关重要的角色。本文将深入探讨操作系统的核心功能、设计哲学以及它们如何适应不断变化的技术需求。我们将从早期的批处理系统和多道程序设计开始,逐步走向现代的多任务、多用户操作系统,并探索它们是如何管理资源、提供安全性和促进用户交互的。文章还将触及开源与专有操作系统之间的辩论,并预测未来可能的发展方向。