操作系统原理(一)——系统调用的原理及实现

系统调用:原理及实现

1. 什么是系统调用

  在计算机中,系统调用(英语:system call),又称为系统呼叫,指运行在使用者空间的程序操作系统内核请求需要更高权限运行的服务。系统调用提供了用户程序与操作系统之间的接口(即系统调用是用户程序和内核交互的接口)。

  操作系统中的状态分为管态(核心态)和目态(用户态)。大多数系统交互式操作需求在内核态执行。如设备IO操作或者进程间通信。特权指令:一类只能在核心态下运行而不能在用户态下运行的特殊指令。不同的操作系统特权指令会有所差异,但是一般来说主要是和硬件相关的一些指令。用户程序只在用户态下运行,有时需要访问系统核心功能,这时通过系统调用接口使用系统调用。

  翻来覆去也就是这几句话:

  应用程序有时会需要一些危险的、权限很高的指令,如果把这些权限放心地交给用户程序是很危险的(比如一个进程可能修改另一个进程的内存区,导致其不能运行),但是又不能完全不给这些权限。于是有了系统调用,危险的指令被包装成系统调用,用户程序只能调用而无权自己运行那些危险的指令。另外,计算机硬件的资源是有限的,为了更好的管理这些资源,所有的资源都由操作系统控制,进程只能向操作系统请求这些资源。操作系统是这些资源的唯一入口,这个入口就是系统调用。

2. 系统调用实现方法概述

  在Xv6中增加系统调用的方法为:

    1) 在 sysproc.c 文件中,添加要增加的系统调用的实现函数;

    2) 在 syscall.h 文件中,定义指向实现函数的系统调用向量(system call vector)的位置;

    3) 在 user.h 文件中,定义可以在 shell 中调用的函数;

    4) 在 syscall.c 文件中,外部定义(external define)一个链接内核和 shell 的函数,使用“步骤2)”中的位置将此函数添加到系统调用向量;

    5) 在 usys.S 文件中,使用 macro 连接 用户的调用请求 和 实现函数;

    6) 在 defs.h 文件中,为自己添加的系统调用增加一个前台声明。

3. 实际操作

  为Xv6增加系统调用“halt”,以完成关机功能。

  a. 在 sysproc.c 文件中,添加要增加的系统调用的实现函数,添加代码如下:

int sys_halt(void)
{
    char *p = "Shutdown";
    for( ; *p; p++)
        outb(0x8900, *p);
    return 0;
}

  b. 在 syscall.h 文件中,定义指向实现函数的系统调用向量(system call vector)的位置,添加代码如下:

#define SYS_halt  22

  c. 在 user.h 文件中,定义可以在 shell 中调用的函数;

int halt(void);

  d. 在 syscall.c 文件中,添加如下代码:

extern int sys_halt(void);

  并在static int (*syscalls [])(void)中,添加如下内容:

[SYS_halt]    sys_halt,

  e. 在usys.S中添加:

SYSCALL(halt)

  完成。

注:

本文参考了以下地址,如有兴趣可访问原地址。

参考博客:http://yalongyang.com/2012/10/xv6-add-system-call/

参考博客:http://www.ithao123.cn/content-6299692.html

参考回答:http://stackoverflow.com/questions/8021774/how-do-i-add-a-system-call-utility-in-xv6

  

时间: 2024-10-13 13:26:11

操作系统原理(一)——系统调用的原理及实现的相关文章

ARM Linux系统调用的原理

转载自:http://blog.csdn.net/hongjiujing/article/details/6831192 ARM Linux系统调用的原理 操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口.在应用程序和硬件之间设置一个额外层具有很多优点.首先,这使得编程更加容易,把 用户从学习硬件设备的低级编程特性中解放出来.其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性. 最后,更重要的是这些接口使得程序具有可移植性,因为只要内核

第五十二课 linux操作系统原理、虚拟机基础原理

linux操作系统原理 linux操作系统原理 虚拟机技术基础原理 虚拟机技术基础原理

TRIZ系列-创新原理-24-中介物原理

中介物原理的具体表述如下:1)使用中间物体来传递或执行一个动作;2)临时把初始物体和另一个容易移走的物体结合: 在日常生活中使用中介物的地方非常多,对于系统也是一样,在如下情况下时,我们可以利用中介物:A)直接执行某个动作有危险(有害作用),则可以利用不怕这种危险的中介物来执行:      比如探险机器人,排雷机器人,服务员用托盘端菜,利用湿毛巾拿过热物等:B)直接执行动作不能达成或很难达成目标,需要利用另一个物体:     比如利用竹竿晒衣服:用镊子夹取细小零件:计算机的远程过程调用中的中间通

TRIZ系列-创新原理-27-一次性用品原理

?? 一次性用品原理也叫廉价替代品原理,其具体表述如下:1)用廉价物品替代昂贵物品,在某些属性上作出妥协;某些系统或部件很昂贵,不利于推广,在质量允许的前提下,对某些属性做些妥协,用廉价的物品替代就不失为一种好的方案.当然,这种替代比较建立在一定的产品质量保证的基础上.用简单替代复杂,用廉价替代高价,用短命替代长寿,都是一些替代选项.当然可以替代的对象不仅仅是机器,工具盒设备,也可以是信息,能量和过程.而人被替代其实是非常正常的选项,毕竟我们绝大部分的发明都是围绕如何替代人力劳动去做的,目的就是

TRIZ系列-创新原理-39-惰性环境原理

惰性环境原理的具体描述如下:1)用惰性环境代替通常环境:2)在物体中增加中性物质或添加剂:3)在真空中实施过程: 惰性环境原理与前面原理38加速氧化原理正好相反,让系统处于一种惰性而不是活性环境.制造惰性环境,可以考虑各种环境类型,包括真空.气体.液体或固体,固体惰性环境包括中性涂层,微粒或要素.一般来讲,对于系统而言,不产生负面作用的环境都是可以考虑的环境.惰性环境的目的是为系统提供具有稳定和安全的化学或物理的环境.这样的例子很多:A)霓虹灯:真空包装:B)充满惰性气体的白炽灯:C)惰性气体保

Linux操作系统中的系统调用接口函数

在分析病毒样本时发现有些系统函数是必用,有些超常用,现在都列出来,希望和大家交流 转载请注明出处:http://blog.csdn.net/u010484477     O(∩_∩)O谢谢 进程控制 fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最大文件数 getpgid 获取指定进程组标识号 setpgid 设置指定进程组标志号 getpgrp 获取当前进程组

支持向量机原理(四)SMO算法原理

支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五)线性支持回归(待填坑) 在SVM的前三篇里,我们优化的目标函数最终都是一个关于\alpha向量的函数.而怎么极小化这个函数,求出对应的\alpha向量,进而求出分离超平面我们没有讲.本篇就对优化这个关于\alpha向量的函数的SMO算法做一个总结. 1. 回顾SVM优化目标函数 我们首先回顾下我们的

数据库原理与应用技术原理阅读笔记(1)

对数据库原理和应用技术原理这本书读了有几天了, 现在对自己学习过程中需要记录的话写下来: 数据库系统设计的目标是:对于给定的应用环境,建立一个性能良好.能满足不同用户使用要求的.又能被选定的数据库管理系统所接受的数据库系统模式. 数据库的结构特性设计过程是:先将现实世界中的事物.事物见的联系用E-R图汇总,得出数据库的信息模型:然后讲信息模型转化为数据模型的逻辑结构表示. 数据库的行为特性的设计步骤是:先将现实世界中的数据和应用情况用数据流程图和数据字典表示,并详细描述其中的数据操作要求(即操作

大数据学习的思维原理(电子商务智能原理)

我们在前面的文章中给大家介绍了很多的大数据学习思维原理,这些内容对于大数据的学习都是很有帮助的,其实大数据的学习思维还是有很多的,我们在这篇文章给大家介绍一下电子商务智能原理. 电子商务智能原理就是大数据改变了电子商务模式,让电子商务更智能.商务智能,大数据时代重新获得定义.而现在,传统企业进入互联网,在掌握了"大数据"技术应用途径之后,会发现有一种豁然开朗的感觉,这些能够给我们带来很多的体验.而大数据时代不是说我们这个时代除了大数据什么都没有,哪怕是在互联网和IT领域,它也不是一切,