王道操作系统考研笔记——1.1.6 系统调用

如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️

文章目录

      • 1.1.6 系统调用
        • 1.1.6.1 系统调用和作用
        • 1.1.6.2 系统调用和库函数
        • 1.1.6.3 系统调用背后的过程
        • 1.1.6.4 小结

1.1.6 系统调用

知识总览

image-20220117120720270

1.1.6.1 系统调用和作用

前面我们在1.1.1.3那里讲过操作系统作为用户和计算机硬件之间的接口,它需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。那时候我们说过程序接口主要是允许用户间接调用。实际上,程序接口由一组系统调用组成。

系统调用是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。

那为什么应用程序要给操作系统发出请求呢,为什么操作系统需要提供给“系统调用”功能呢?

让我们想象一个场景,如果我们去打印店打印论文,当我按下了“打印”之后,打印机开始工作。结果我的论文打印到一半的时候,另外一位同学也按下“打印”,开始打印它自己的论文。最终,你的论文和该同学的论文页面并没有混杂在一起,都是按顺序依次打印的。

那为什么是按顺序依次打印呢?为什么不会乱呢?

体现到我们的操作系统来的话,操作系统就是作为调控的那一部分。在某个时刻多个进程同时向操作系统提出系统调用的请求的时候,操作系统就会对各个请求进行协调管理。

应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作,都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

系统调用可以分为五大类,这里只需要简单的了解,在后面我们会详细地介绍他们。

image-20220117134753336

需要注意的是,系统调用相关处理涉及到对系统资源的管理、对进程的控制,这些功能需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下完成。


1.1.6.2 系统调用和库函数

image-20220117135250646

在上图中,有些库函数涉及系统调用,例如“创建一个新文件”;有些库函数则不涉及系统调用,例如“取绝对值”。


1.1.6.3 系统调用背后的过程

在我们用高级语言编写的代码中,若有关于系统调用的函数,我们假设为write()。那么在高级语言编译后会变成汇编语言,如下图:

image-20220117143525358

也就是说,实际上高级语言中的库函数里面有些库函数拥有系统调用的功能,此刻它们虽然看起来很简单,实际上背后蕴含了很多关于系统调用的细节,而高级语言库函数的好用之处在于,它屏蔽了关于底层的细节,给了我们一种系统调用最简单的方式。

image-20220117143952994

这个过程实际上是以下的步骤:

  1. 首先由传递系统调用参数
  2. 执行陷入指令(用户态)
  3. 执行系统调用相应服务程序(核心态)
  4. 返回用户程序

这里有几个需要注意的点是:

  • 陷入指令是在用户态执行的,执行陷入指令之后会立即引发一个内中断,从而CPU进入核心态。
  • 发出系统调用请求是在核心态,而对系统调用的相应处理在核心态下进行。
  • 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令。

1.1.6.4 小结

  • 陷入指令也叫做trap指令/访管指令

image-20220117144805023

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery年月日(生日)选择器

我们在编辑用户资料时经常会遇到选择生日选项的问题,今天我给大家介绍如何使用js来实现年月日(生日)选择器,能够准确计算闰年的年月日,方便表单处理。 文章:http://www.helloweba.com/view-blog-263.html 演…

计算机设备行业特征,自动装配机在自动化设备行业具有的特点

伴随着社会经济的不断发展,工业生产的市场规模越来越大,人们的需求也越来越大。自动装配机在自动化设备行业具有哪些特点?鲁工自动化小编对自动装配机的特点进行了分析。1.自动装配机需要由多台工作台进行扩展和分级。上层控制器,用来控制二…

Elasticsearch使用REST API实现全文检索

Elasticsearch REST API elasticsearch支持通过http请求响应服务,http请求默认使用9200断开,因此通过curl命令,可以发送http请求,并得到json返回内容。常用的REST API包括一下几个: 检查ES集群状态 curl http://localhost:9200/_c…

解决 MyEclipse build workspace 慢,validation javascript 更慢的问题

自从升级了MyEclipse到7.0,项目Build的时候总是很慢,显示Validating 那些js,html文件。不管我怎么调整 Windows > Preference > MyEclipse > Validation或者是manage validation,都没有用。 我公司的电脑是Core2 Duo CPU T7250 2.0…

Netty实例-简单的服务端-client实现,凝视具体

书籍推荐&#xff1a; 实例代码 &#xff1a; http://download.csdn.net/detail/jiangtao_st/7677503Netty Server端实现/*** * <p>* Netty Server Simple* </p>* * author 卓轩* 创建时间&#xff1a;2014年7月7日* versi…

数据结构杂谈(四)

本文的所有代码均由C编写 4 双链表、循环链表和静态链表 文章目录4 双链表、循环链表和静态链表4.1 双链表4.1.1 双链表的定义4.1.2 双链表的初始化4.1.2 双链表的后插操作4.1.3 双链表的后删操作4.1.4 双链表的销毁操作4.2 循环链表4.2.1 循环链表的概念4.2.2 循环单链表4.2.2…

量子计算机怎么储存,什么是量子计算机_量子计算机原理_量子计算的两种有效方法...

量子计算机是一种可以实现量子计算的机器&#xff0c;是一种通过量子力学规律以实现数学和逻辑运算&#xff0c;处理和储存信息能力的系统。它以量子态为记忆单元和信息储存形式&#xff0c;以量子动力学演化为信息传递与加工基础的量子通讯与量子计算&#xff0c;在量子计算机…

Spring注解依赖注入的三种方式的优缺点以及优先选择

当我们在使用依赖注入的时候&#xff0c;通常有三种方式&#xff1a; 1.通过构造器来注入&#xff1b; 2.通过setter方法来注入&#xff1b; 3.通过filed变量来注入&#xff1b; 那么他们有什么区别吗&#xff1f;应该选择哪种方式更好&#xff1f; 代码示例&#xff1a; Const…

研究笔记:iOS中使用WebViewProxy拦截URL请求

本文为阿里iOS开发工程师阳翼所作。 先说明下iOS中加载url的正常流程&#xff1a; 1.客户端发送NSURLRequest给server 2.server返回对应的NSURLResponse 如果被WebViewProxy拦截&#xff0c;则流程变为&#xff1a; 1.客户端发送NSURLRequest给server 2.这个request被WebV…

seo超强外部链接、内部链接技巧

轮链-混链对做内外链都是非常有效果的&#xff01; 外连&#xff0c;之于大家并不陌生&#xff0c;增加外链的方法也海了去&#xff0c;如软文推广、博客推广、友情链接等等等等&#xff0c;在这里我就不再累述&#xff0c;最近在一些文章里看到轮链和混链的SEO优化技巧&#x…

王道操作系统考研笔记——1.1.5 中断和异常

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录1.1.5 中断和异常1.1.5.1 中断机制的诞生1.1.5.2 中断的概念和作用1.1.5.3 中断的分类1.1.5.4 小结1.1.5 中断和异常 知识总览 1.1.5.1 中断机制的诞…

0101代码构成了计算机语言,计算机(全国一级考试)理论复习要点、模拟题.doc

第一部分 计算机基础知识计算机是能超高速自动进行算术运算和逻辑运算的电子机器&#xff1b;第一台计算机诞生于1946年(取名为ENIAC)&#xff0c;在短短的50多年时间&#xff0c;已经历了四代&#xff1a;第一代电子管计算机、第二代晶体管计算机、第三代集成电路计算机(中小规…

PHP gd库 验证码

需要的简单前台页面 <html><head><meta http-equivContent-Type contenttext/html; charsetutf-8><title>验证码</title></head><script type"text/javascript"> function yanz() { document.getElementById…

LR+Jenkins实践思路

思路&#xff1a;在Loadrunner的安装bin目录下有Loadrunner Control模块的启动程序 “Wlrun.exe”&#xff0c;想利用Jenkin的 windows的batch命令持续构建一个任务&#xff0c;自动启动运行场景&#xff0c;且把结果发给analysis 通过Batch来调用LR场景&#xff1a; Loadrunne…

android中的tabdemo

首先先样式&#xff0c;注意必须用android:id/tabs 不能使用id <TabHost android:layout_height"match_parent"android:layout_width"match_parent"android:id"android:id/tabhost"xmlns:android"http://schemas.android.com/apk/res/an…

并行计算——基础并行计算

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录2 基础并行计算2.1 并行算法的基础知识2.1.1 并行算法的基本概念2.1.2 并行算法的表达2.1.3 并行算法的复杂性度量2.1.3.1 概述2.1.3.2 串行和并行算法…

计算机综合试验,计算机综合实验1.doc

计算机综合实验1.doc《计算机实用技术》实验报告实验序号&#xff1a;一      实验项目名称&#xff1a;综合实验1学  号姓  名专业、班实验地点指导教师时间2010.10.一、实验目的及要求1.熟悉Windows2000(XP)基本操作2.掌握在Windows2000(XP)资源管理器中文件和文件夹…

Go语言中cannot convert adminname (type interface {}) to type *: need type assertion的解决办法...

解决的办法是把string(adminname)替换为adminname.(string)。其它类型也是类似。转载于:https://www.cnblogs.com/huanhang/p/8352707.html

inotify-tools使用方法介绍

inotify-tools使用方法介绍文章目录[隐藏]安装方法使用例子inotifywaitinotifywatch参数说明inotifywaitinotifywatch可监听事件inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数&#xff0c;同时还提供了一系列的命令行工具&#xff0c;这些工具可以…

王道操作系统考研笔记——2.1.1 进程的定义、组成、组织方式和特征

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录2.1.1 进程的定义、组成、组织方式和特征2.1.1.1 进程的定义2.1.1.2 进程的定义2.1.1.3 进程的组成2.1.1.4 进程的组织2.1.1.5 链接方式2.1.1.6 索引方…