上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用。

一、I/O控制方式

  I/O就是输入输出,I/O设备指的是输入输出设备和存储设备。I/O控制方式值得就是CPU对内存资源与I/O设备之间输入输出的控制。I/O的控制方式按照发展有下面几种:

(1)、程序I/O方式。

  这个最原始的方式的特点是I/O过程中,CPU全程阻塞。CPU向I/O控制器发送指令,要求读取一个字节,IO控制器取一个字节,存入自身的数据寄存器中,存入完毕后通知CPU。然后CPU把这个字节存入内存。在这个过程中,CPU的大部分时间都在等待操作完成。值得注意的是,这种控制方式必须以字节为单位。

(2)、中断驱动I/O控制方式。

  这种控制方式的特点是I/O过程中,CPU跟I/O控制器并行工作,无需阻塞。传输过程跟程序I/O方式没区别。不过由于CPU在I/O过程中无需阻塞,效率比之程序I/O方式提高了百倍。

(3)、直接存储器访问I/O控制方式——DMA(Direct Memory Access)

  这是一种非常有效率的I/O控制方式——数据传输的基本单位是数据块;DMA控制器将数据直接送入内存;整个数据块传送开始和结束的一刻CPU才会处理,其他时候CPU与控制器并行工作。值得注意的是DMA控制方式是由DMA控制器实现的,DMA控制器有3部分——主机&控制器接口、控制器&块设备接口和I/O控制逻辑。核心就是主机&控制器接口,这个接口是为了完成主机和块数据的直接交换。DMA控制器为了实现功能有四类寄存器:命令/状态寄存器(CR),用来存放控制信息和状态;内存地址寄存器(MAR),存放目标地址;数据寄存器(DR),相当于缓存,暂存数据;以及数据计数器(DC),存放本次 CPU 要读或写的字(节)数。数据传送的过程,简单来说就是,传送前在MAR中设置目标地址,在DC中设置数据块大小,然后控制器每从磁盘取数据存入内存或从内存取数据存入磁盘,就把MAR中的目标地址加一,并把DC中数据块大小减一,直到DC中数据块大小为0,数据便传送完毕。可以看到,DMA是由硬件实现数据块移动的。

(4)、I/O通道控制方式

  这种控制方式是对DMA方式的改进,把一个数据块的传输改进为一组数据块的传输。通道指的是这整个传输的虚拟含义。I/O通道控制方式是由通道程序和设备控制器共同实现的。可以说,它比DMA方式改进的地方在于用程序增加了对DMA方式的控制,使多个数据块的传输能够合为一个整体。

  《计算机操作系统》上这一幅流程图直接拿来用了:

二、系统调用

  什么是系统调用?系统调用说白了就是操作系统提供的接口,用以与系统通信,取得系统服务。应用程序需要通过系统调用才能访问操作系统的关键资源。首先来了解一下计算机的两种状态。

(1)、计算机的两种状态——系统态和用户态

  系统态和用户态,其本质就是CPU的两种状态。

  1)系统态,又称管态或核心态。处理机运行操作系统的状态。

  2)用户态,又称目态。处理机运行应用程序的状态。

  应用程序需要调用系统功能时,通过系统调用,CPU转为系统态,取得系统资源,执行系统功能。对应CPU的系统态和用户态,CPU所执行的指令分为特权指令和非特权指令。

(2)CPU执行的两种指令——特权指令和非特权指令。

  1)特权指令

  即CPU在系统态所执行的指令。这种指令只允许系统态的CPU运行,即只允许操作系统调用。特权指令可以对操作系统执行能执行的所有操作,不受任何限制。

  2)非特权指令

  即CPU在用户态所执行的指令。这种指令只能执行一般性的操作任务,不能直接进行访问系统中的硬件和软件,其对内存的访问范围也局限于用户空间。应用程序想要访问系统中的硬件和软件,只能通过系统调用间接进行。

(3)系统调用的实现

  那么系统调用是怎么实现的呢?系统调用是通过中断机制实现的,并且是同一个中断入口来实现。具体操作就是系统调用的时候,CPU转换为系统态,请求系统服务,处理完毕后继续执行应用程序。这里有几个概念需要了解一下:

  1)中断的本质:百度百科解释的很好:“CPU执行完每条指令时,都会去检查一个中断标志位”,这句话是所有关于中断长篇大论的开场白,但很容易被人忽略,其实,这就是中断的本质。

  2)内中断(陷入、捕获):由于系统调用引起的中断

  3)陷入指令:由于系统调用引起中断的指令称为陷入指令。

  4)中断标识码(中断类型号):由硬件(通常是中断控制器)产生,以标识不同的中断源。

  5)中断向量:中断服务程序的入口地址。在某些计算机中,中断向量的位置存放一条跳转到中断服务程序入口地址的跳转指令。

  6)中断向量地址:存储中断向量的存储单元地址

参考:《计算机操作系统(汤子瀛)》、百度

我的操作系统复习——I/O控制和系统调用的更多相关文章

  1. iNeuOS工业互联网操作系统,分布式云端控制安全策略和增加实时日志功能

    目       录 1.      概述... 2 2.      平台演示... 2 3.      云端控制策略和应用过程... 2 3.1           云端控制策略... 2 3.2   ...

  2. 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?

    1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...

  3. 操作系统开发系列—13.g.操作系统的系统调用 ●

    在我们的操作系统中,已经存在的3个进程是运行在ring1上的,它们已经不能任意地使用某些指令,不能访问某些权限更高的内存区域,但如果一项任务需要这些使用指令或者内存区域时,只能通过系统调用来实现,它是 ...

  4. 操作系统:进程管理和IO控制

    一.进程管理 进程管理包括进程控制,进程调度,进程同步与通信,死锁控制四个内容. (一)进程控制 进程是操作系统中运行的基本单位,包括程序段,数据段和进程控制段.操作系统通过进程控制块(PCB)管理进 ...

  5. linux操作系统基础

    计算机概述 1.计算机接收用户输入指令数据,经过cpu数据与逻辑单元运算处理后,产生或储存成有用的信息--->I/O设备+cpu+处理信息=计算机. 2.计算机五大单元:I/O单元 内存单元 c ...

  6. Linux C 程序 进程控制(17)

    进程控制 1.进程概述现代操作系统的特点在于程序的并行执行.Linux是一个多用户多任务的操作系统.ps .pstree 查看进程进程除了进程id外还有一些其他标识信息,可以通过相应的函数获得.// ...

  7. 01-Linux操作系统+指令

    一.Linux操作系统     操作系统定义:操作系统直接运行在计算机上的系统软件, 它是与硬件打交道和控制软件运行的计算机程序.          虚拟机:就是模拟一个真实的计算机,好比一个虚拟的电 ...

  8. DAY01、计算机组成及操作系统

    一.编程与编程的目的: 1.什么是语言?什么是编程语言? 语言是一事物与另一事物之间沟通的介质 编程语言就是程序员与计算机之间沟通的介质 2.什么是编程? 程序员把自己想要让计算机做的事用编程语言表达 ...

  9. 进程描述和控制(os 笔记二)

    进程描述和控制 ​ 计算机最初的主要任务之一就是高效的自动化我们的工作,完成用户交付的任务.而这种任务在计算机中的表示就是一个个的进程.从上一篇文章中描述的计算机的发展历史我们能发现,无论是单道批处理 ...

随机推荐

  1. android官方下拉刷新控件SwipeRefreshLayout的使用

    可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...

  2. c#编程基础之函数可变参数

    可变参数:int sum (params int[] values)int sum (string name,params int[] values) 注意:params参数必须是形参表中的最后一个参 ...

  3. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  4. 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用

    F# 项目 在之前的几篇文章介绍的代码都在交互窗口(fsi.exe)里运行,但平常开发的软件程序可能含有大类类型和函数定义,代码不可能都在一个文件里.下面我们来看VS里提供的F#项目模板. F#项目模 ...

  5. oracle运算符

    单引号('): 在Oracle中,应该只运用单引号将文本和字符和日期括起来,不能运用引号(包括单双引号)将数字括起来. 双引号("): 在Oracle中,单双引号意思不同.双引号被用来将包含 ...

  6. [C1] 优化 C1FlexGrid 单元格边框

    一  优化理由 如下图所示,如果按照 C1FlexGrid 自带的单元格边框设置,即对每个单元格的 CellStyle 的 BorderThickness 进行设置,会得到如下图的效果: 其中,明显可 ...

  7. tee(打印并保存文件)

     tee从标准设备读取数据,输出到标准输出设备,同时保存成文件-a 附加到既有文件后面,而非覆盖他.例如: pwd |  tee who.out

  8. Python VS PHP 基础语法

    这几天在学习Python,鄙人平时学习中为了方便记忆和更好的比较与理解语言二者之间在某些情况的优劣性,所以花了点时间,整理了一下 Python 和 PHP 常用语法的一些区别. 一.大小写 PHP: ...

  9. ABP Zero示例项目登录报错“Empty or invalid anti forgery header token.”问题解决

    ABP Zero项目,登录时出现如图"Empty or invalid anti forgery header token."错误提示的解决方法: 在 WebModule.cs的P ...

  10. Mac下安装ElasticSearch

    简单记录一下安装ES的过程,给小小白们提供一下参考: 下载安装包 https://www.elastic.co/downloads/elasticsearch建议下载2.3.2版本,最新的5.0.0版 ...