扒开系统调用的三层皮

一、用户态、内核态和中断

一般现代CPU都有几种不同的指令级别

在高级别执行级别下,代码可以执行特权指令,访问任意的物理地址,称之为内核态

在相应的低指令执行级别下,代码的掌控范围会受到限制,只能在对应级别允许的范围内活动,称之为用户态

为什么会有权限级别划分

为了让系统本身更稳定,保证代码不被误写崩溃

CS寄存器的最低两位表明了当前代码的特权级

CPU每条指令的读取都是通过CS:eip这两个寄存器

CS:代码段选择寄存器
eip:偏移量寄存器

在Linux中,地址空间是一个显著的标志,0xc0000000以上的地址空间只能在内核态下访问

地址空间指逻辑地址而不是物理地址

中断处理时从用户态进入内核态的主要方式

系统调用是一种特殊的中断

寄存器上下文——从用户态切换到内核态

必须保存用户态寄存器的上下文:要保存哪些?保存到哪里?

中断/int指令会字啊堆栈上保存一些寄存器的值中断发生后的第一件事就是保存现场

二、系统调用概述和系统调用的三层皮

系统调用的概述

系统调用的意义:操作系统为用户态进程与硬件设备进行交互提供了一组接口————系统调用

把用户从底层的硬件编程中解放出来
极大的提高了系统的安全性
使用户程序具有可移植性

操作系统提供的API和系统调用的关系

API只是一个函数调用
系统调用通过软终端向内核法术一个明确的请求

不是每个API都对应一个特定的系统调用

API可能直接通过用户态的服务
一个单独的API可能调用几个系统调用
不同的API可能调用了同一个系统调用

返回值

大部分封装例程返回一个函数,其值的含义依赖于相应的系统调用
-1在多数情况下表示内核不能满足进程的请求
Licb中定义的errno变量包含特定的出错码

系统调用号将xyz和system_xyz关联起来了

当用户态进程调用一个系统调用时,CPU切换到内核并开始执行一个内核函数

传参

内核实现了很多不同的系统调用,进程必须致命那些需要系统调用,着需要传递一个名为系统调用号的参数

系统调用的参数传递方式:

三、使用库函数API获取系统当前时间

使用C代码中嵌入汇编代码触发系统调用获取系统当前时间

总结

操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用。

其作用是:把用户从底层的硬件编程中解放出来;极大的提高了系统的安全性;使用户程序具有可移植性。

Linux内核分析作业四的更多相关文章

  1. Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

    原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...

  2. Linux内核分析第四章 读书笔记

    Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...

  3. Linux内核实验作业四

    实验作业:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 20135313吴子怡.北京电子科技学院 [第一部分]使用库函数API来获取用户标识号.库函数为getuid() 代码如下: ...

  4. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  5. Linux内核分析作业第四周

    系统调用的三个层次 一.用户态.内核态和中断 用户通过库函数与系统调用联系起来. 1.内核态 在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态: 在低级 ...

  6. Linux内核分析作业 NO.5

    拔掉系统调用的三层皮(下) 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  7. Linux内核分析作业 NO.4

    扒开系统调用的三层皮(上) 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  8. 【MOOC EXP】Linux内核分析实验四报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...

  9. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

随机推荐

  1. chrome主页被篡改为360导航之解决方式

    昨天,安装某款游戏之后,发现chrome的主页被篡改为360导航. 进入chrome设置改动主页,又一次启动chrome还是360导航,后来发如今chrome快捷方式的属性中目标后面加了一串360导航 ...

  2. 关于 X509Certificate2 找到文件路径的问题

    由于微信退款功能需要用到证书,当调用 X509Certificate2 的时候,会提示找不到文件而报错. X509Certificate2 cert = new X509Certificate2(文件 ...

  3. Postman-自动化传参

    一,自动化传参 在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要 ...

  4. mysql刚启动就停止是什么原因

    1.找到mysql安装目录,将其配置文件my.default.ini改名为my.ini,并且将my.ini移至bin目录下. 2.启动命令行,将目录切换到mysql安装目录的bin目录下.3.接下来, ...

  5. PAT B1017 A除以B (20 分)

    本题要求计算 /,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数.你需要输出商数 Q 和余数 R,使得 A=B×Q+R成立. 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 ...

  6. $LCT$初步

    \(\rm{0x01}\) 闲话 · \(LCT\)的用途以及具体思路 LCT是啥?百度一下的话--貌似是一种检查妇科病的东西?Oier的口味可是真不一般啊 咳,其实在我最近只是浅浅地学了一部分的基础 ...

  7. 将EF项目从dbfirst转化为codefirst

    一个脚本服务的项目,之前是先设计的数据库表,采用EF的dbfirst做的映射.项目完成后,出现迁移瓶颈. 1.dbfirst项目,如果数据库表结构做了调整,需要重新映射 2.当出现表结构一致,但数据库 ...

  8. VB6 CHECK is run as admin privilege

    vb6 code: Private Declare Function IsUserAnAdmin Lib "Shell32" Alias "#680" () A ...

  9. web窗体的运用

    using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebAp ...

  10. controlfile 备份到trace文件例子

    主要是为了学习oracle的克隆.参考: http://www.dba-oracle.com/oracle_tips_db_copy.htm 执行: SQL>alter database bac ...