当前位置: 首页 > news >正文

网站核检单/成都全网营销推广

网站核检单,成都全网营销推广,域名主机 网站建设,网络设计实训课程文章目录第一章 计算机系统概述系统调用(一)什么是系统调用,有何作用(二)系统调用与库函数的区别(三)小例子:为什么系统调用是必须的(四)什么功能要用到系统调…

文章目录

  • 第一章 计算机系统概述
    • 系统调用
      • (一)什么是系统调用,有何作用
      • (二)系统调用与库函数的区别
      • (三)小例子:为什么系统调用是必须的
      • (四)什么功能要用到系统调用
      • (五)系统调用的过程
    • 小结

第一章 计算机系统概述

系统调用

  • 什么是系统调用?
  • 系统调用与库函数的区别
  • 小例子:为什么系统调用是必须的?
  • 什么功能要用系统调用实现?
  • 系统调用的过程

(一)什么是系统调用,有何作用

  操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

image-20230304170154913

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

(二)系统调用与库函数的区别

image-20230304170453225

  系统调用和库函数的调用有区别。平时我们写程序时,可以用汇编语言的方式来直接请求系统调用服务。但是现在的编程更多的是使用高级语言编程,我们会直接使用高级语言的库函数,但是这些高级语言的库函数,在底层也会用到操作系统提供的系统调用功能,来请求操作系统的服务。

  系统调用,应该是比高级语言的库函数更为底层的接口。

普通应用程序可直接进行系统调用,也可使用库函数。有的库函数涉及系统调用,有的不涉及
编程语言向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。
操作系统向上提供系统调用,使得上层程序能请求内核的服务。
裸机

不涉及系统调用的库函数:如“取绝对值”的函数

涉及系统调用的库函数:如“创建一个新文件”的函数

(三)小例子:为什么系统调用是必须的

  生活场景:你去学校的打印店打印论文,你按下了WPS的“打印”选项,打印机开始工作。

  你的论文打印到一半时,另一位同学按下了Word的“打印”按钮,开始打印他自己的论文。

  思考:如果两个进程可以随意地、并发地共享打印机资源,会发生什么情况?

  两个进程并发运行,打印机设备交替地收到WPS和Word两个进程发来的打印请求,结果两篇论文的内容混杂在一起了。这显然不是我们想要的结果。

  由于系统当中有各种各样的并发的进程,而这些并发的进程又需要共享地使用类似于打印机设备这样的共享资源,但是这样的共享资源其实是需要各个进程互斥地共享的。

  那么怎么实现对共享资源的互斥访问呢?最好的方式就是让操作系统内核来对共享资源进行统一的管理。上层的那些应用程序只能通过“系统调用”的方式,来请求操作系统,给它分配这种资源,之后,这个进程才可以对这种资源进行使用和访问。而各个进程的请求会由操作系统内核来协调处理,保证它们并发运行的时候不会发生这种混乱的事情。

  解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

  因此,系统调用是必须的。

(四)什么功能要用到系统调用

  王道资料按照功能划分,分为了以下五种:

系统调用(按功能分类)

  • 设备管理

    完成设备的 请求/释放/启动 等功能

  • 文件管理

    完成文件的 读/写/创建/删除 等功能

  • 进程控制

    完成进程的 创建/撤销/阻塞/唤醒 等功能

  • 进程通信

    完成进程之间的 消息传递/信号传递 等功能

  • 内存管理

    完成内存的 分配/回收 等功能

拓展:可以搜索“Linux系统调用”,了解Linux操作系统提供了哪些系统调用。

  总之,只要是对共享资源的访问,那肯定是需要系统调用来进行,因为这些共享资源是有限的(如:内存、I/O设备、文件),所以操作系统会对这些共享资源进行统一的管理和分配,因此应用程序在使用这些资源的时候就必须通过系统调用的方式请求操作系统内核来帮它进行接下来的处理。

  应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管。因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

(五)系统调用的过程

image-20230304173240093

  一个应用程序运行在用户态,这个程序的各个指令会依次地被CPU执行。

  当它想要发出系统调用的时候,它需要用传参数的指令,给CPU的寄存器当中传递一些必要的参数。比如在某寄存器当中传入了参数1参数1的作用是:指明本次将要发出的系统调用是什么类型(如Linux系统中的“fork”,我指明一会儿要做的就是它)。而传递参数的指令可能会有多条(如图,还有参数2),主要要看这次系统调用需要传递几个参数。而操作系统会根据应用程序提供的这些参数,来判断它想要的到底是哪种类型的服务。

  当这些参数都放到了寄存器当中之后,应用程序就会执行一条特殊的指令,叫作陷入指令。这个陷入指令的执行,会引发一个内中断。CPU在检测到这个内部中断信号之后,它发现这个内部中断信号是由trap指令引起的,于是,CPU接下来就会暂停运行这个应用程序,转而去执行陷入指令处理程序,即系统调用入口程序(可以理解为一种中断程序,只是由陷入程序引发的内中断)。【CPU转为内核态了】

  接下来,系统调用程序会检查寄存器中的若干参数,最终知道这个程序想要调用的是哪种系统调用服务,于是,接下来,系统调用入口程序,就会调用特定的系统调用类型所对应的处理程序,然后让这个程序上CPU运行。

  系统调用处理完毕后,CPU又会转为用户态,接着执行之前的应用程序。


image-20230304174726031

  传递系统调用参数→执行陷入指令(用户态)→执行相应内核程序处理系统调用(核心态)→返回应用程序

  注意:

  1、陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态

  2、发出系统调用请求是在用户态,而对系统调用的相应处理核心态下进行。

小结

image-20230304175118620

相关文章:

[1.3.3]计算机系统概述——系统调用

文章目录第一章 计算机系统概述系统调用(一)什么是系统调用,有何作用(二)系统调用与库函数的区别(三)小例子:为什么系统调用是必须的(四)什么功能要用到系统调…...

【Java开发】JUC进阶 03:读写锁、阻塞队列、同步队列

1 读写锁(ReadWriteLock)📌 要点实现类:ReentrantReadWirteLock通过读写锁实现更细粒度的控制,当然通过Synchronized和Lock锁也能达到目的,不过他们会在写入和读取操作都给加锁,影响性能&#x…...

Fragment中获取Activity的一点点建议

平时的Android开发中,我们经常要在Fragment中去获取当前的Activity实例,刚开始的时候可能使用使用Fragment提供的getActivity方法来获取,但是这个方法可能返回null,为了让程序可以正常运行,项目中就出现大量下面这样的…...

Java Math类

Java Math 类是 Java 标准库中提供的一个数学计算类,它提供了很多数学函数,如三角函数、指数函数、对数函数等。在实际工作中,Java Math 类常常被用于处理数学计算问题,例如计算复杂的数学公式、实现数学算法等。本文将详细介绍 J…...

Javascript -- 加载时间线 正则表达式

js加载时间线 1、创建Document对象,开始解析web页面,解析html元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段的document.readyState ‘loading’ 2、遇到link外部css,创建线程加载,并继续解析文档 3、遇到…...

gdb/git的基本使用

热爱编程的你,一定经常徘徊在写bug和改bug之间,调试器也一定是你随影而行的伙伴,离开了它你应该会寝食难安吧! 目录 gdb的使用 断点操作 运行调试 观察数据 Git的使用 仓库的创建和拉取 .gitignore “三板斧” 常用指令 gd…...

信息安全与数学基础-笔记-④二次同余方程

知识目录二次同余方程的解欧拉判别式Legendre (勒让德符号)二次同余方程的解 什么是二次同余方程的解 注意这里二次同余方程和一次同余方程是不一样的 在x2x^2x2 三 a (mod m) 方程中举例 ↓ 解即剩余类,因为是模m,所以我们在 [ 0, m-1 ]中逐个代入看是…...

Luogu P4447 [AHOI2018初中组]分组

题目链接:传送门 将nnn个可重复的整数分为mmm组,每组中的数必须连续且不重复,使人数最少的组人数最多。 两个最值肯定第一想到二分,每次二分出一个值,判断在这个值为答案的前提下能否完成分组。 在思考判别函数时发现…...

手把手创建flask项目

Flask 框架流程 什么是Flask: Flask诞生于2010年, 使用python语言基于Werkzeug工具箱编写的轻量级Web开发框架 Flask本身相当于一个内核, 其他几乎所有的功能都要用到扩展(邮件:Flask-Mail, 用户认证:Flask-Login, 数据库:Flask-SQLAlchemy). Flask的核心在于Werkz…...

SpringCloud-4_Eureka服务注册与发现

Eureka作为一个老牌经典的服务注册&发现技术,其设计和理念,也在影响后面的组件。目前主流的服务注册&发现的组件是Nacos当前项目架构问题分析-引出Eureka问题分析:1.在企业级项目中,服务消费访问请求会存在高并发2.如果只…...

【react全家桶】生命周期

文章目录04 【生命周期】1.简介2.初始化阶段2.1 constructor2.2 componentWillMount(即将废弃)2.3 static getDerivedStateFromProps(新钩子)2.4 render2.5 componentDidMount2.6 初始化阶段总结3.更新阶段3.1 componentWillRecei…...

虚拟机安装Windows 10

虚拟机安装Windows 10 镜像下载 方法一:下载我制作好的镜像文件->百度网盘链接 提取码:Chen 方法二:自己做一个 进入微软官网链接 下载"MediaCreationTool20H2" 运行该工具 点击下一步选择路径,等他下载好就欧克了…...

【CMU15-445数据库】bustub Project #2:B+ Tree(下)

Project 2 最后一篇,讲解 B 树并发控制的实现。说实话一开始博主以为这块内容不会很难(毕竟有 Project 1 一把大锁摆烂秒过的历史x),但实现起来才发现不用一把大锁真的极其痛苦,折腾了一周多才弄完。 本文分基础版算法…...

leetcode 困难 —— 外星文字典(拓扑排序)

题目: 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字…...

ubuntu server 18.04使用tensorflow进行ddqn训练全过程

0. 前言 需要使用ddqn完成某项任务,为了快速训练,使用带有GPU的服务器进行训练。记录下整个过程,以及遇到的坑。 1. 选择模板代码 参考代码来源 GitHub 该代码最后一次更新是Mar 24, 2020。 环境配置: python3.8 运行安装脚本…...

2023年全国最新二级建造师精选真题及答案14

百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 二、多选题 61.已经取得下列资质的设计单位,可以直接申请相应类别施工总承包一级…...

mysql一条语句的写入原理

mysql写入原理 我们知道在mysql数据库最核心的大脑就是执行引擎; 其中的默认引擎Innodb在可靠执行和性能中做出来平衡; innodb支持在事务控制、读写效率,多用户并发,索引搜索方面都表现不俗; innodb如何进行数据写入…...

嵌入式Linux内核代码风格(二)

第九章:你已经把事情弄糟了 这没什么,我们都是这样。可能你的使用了很长时间Unix的朋友已经告诉你“GNU emacs”能 自动帮你格式化C源代码,而且你也注意到了,确实是这样,不过它所使用的默认值和我们 想要的相去甚远&a…...

Spring Boot @Aspect 切面编程实现访问请求日志记录

aop切面编程想必大家都不陌生了,aspect可以很方便开发人员对请求指定拦截层,一般是根据条件切入到controller控制层,做一些鉴权、分析注解、获取类名方法名参数、记录操作日志等。 在SpringBoot中使用aop首先是要导入依赖如下: …...

初学者的第一个Linux驱动

软件环境:Ubuntu20.04 Linux内核源码:3.4.39 硬件环境:GEC6818 什么是驱动?简单来说就是让硬件工作起来的程序代码。 Linux驱动模块加载有两种方式: 1、把写好的驱动代码直接编译进内核。 2、把写好的驱动代码编…...

7. 拼数

1 题目描述 拼数成绩10开启时间2021年09月24日 星期五 18:00折扣0.8折扣时间2021年11月15日 星期一 00:00允许迟交否关闭时间2021年11月23日 星期二 00:00 设有 n个正整数 a[1]​…a[n]​,将它们联接成一排,相邻数字首尾相接,组成一个最大的整…...

Java每天15道面试题 | Redis

redis 和 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高? 区别: 1.mc 可缓存图片和视频。rd 支持除 k/v 更多的数据结构; 2.rd 可以使用虚拟内存,rd 可持久化和 aof 灾难恢复&#xff0…...

13_pinctrl子系统

总结 pinctrl作为驱动 iomuxc节点在设备树里面 存储全部所需的引脚配置信息 iomux节点匹配pinctrl子系统 控制硬件外设的时候 要知道有哪些gpio 再看gpio有哪些服用寄存器 接着在程序配置gpio相关寄存器 这样搞效率很低 所以用iomux节点保存所有的引脚组 pinctrl驱动起来的时…...

Linux系统对于实施人员的价值

Linux系统对于实施人员的价值 随着互联网的发展,linux系统越来越突显了巨大的作用,很多互联网公司,政府企业,只要用到服务器的地方几乎都能看到linux系统的身影,可以说服务是不是在linux系统跑的代表了企业的技术水平&…...

ForkJoin 和 Stream并行流

还在用 for 循环计算两个数之间所有数的和吗?下面提供两种新方法! 1. ForkJoin 1.1 背景 要知道,在一个方法中,如果没有做特殊的处理,那么在方法开始到结束使用的都是同一个线程,无论你的业务有多复杂 那…...

逻辑优化-cofactor

1. 简介 逻辑综合中的Cofactor优化方法是一种重要的逻辑优化技术。它通过提取逻辑电路中的共同部分,从而简化电路、减小面积和延迟。该方法广泛应用于电子设计自动化(EDA)领域中的逻辑综合、等价转换和优化等方面。 Cofactor优化方法最早由…...

车道线检测CondLaneNet论文和源码解读

CondLaneNet: a Top-to-down Lane Detection Framework Based on Conditional Convolution Paper:https://arxiv.org/pdf/2105.05003.pdf code:GitHub - aliyun/conditional-lane-detection 论文解读: 一、摘要 这项工作作为车道线检测任…...

vue3的插槽slots

文章目录普通插槽Test.vueFancyButton.vue具名插槽Test.vueBaseLayout.vue作用域插槽默认插槽Test.vueBaseLayout.vue具名作用域插槽Test.vueBaseLayout.vue普通插槽 父组件使用子组件时,在子组件闭合标签中提供内容模板,插入到子组件定义的出口的地方 …...

docker学校服务器管理

docker 学校服务器管理使用docker,docker使用go语言编写。对于docker的理解,需要知道几个关键字docker, scp,images, container。 docker-码头工人scp-传输命令images/repository-镜像container-容器 docker是码头工人,scp相当…...

pv和pvc

一、PV和PVC详解当前,存储的方式和种类有很多,并且各种存储的参数也需要非常专业的技术人员才能够了解。在Kubernetes集群中,放了方便我们的使用和管理,Kubernetes提出了PV和PVC的概念,这样Kubernetes集群的管理人员就…...