第四章 系统调用的三层机制(上)

4.1 用户态、内核态和中断

知识点总结:

  • 与系统调用打交道的方式是通过库函数的方式。
  • 用户态与内核态的区分
    • 内核态:高的执行级别下,代码可以执行特权指令,访问任意的物理内存
    • 用户态:低级别指令
  • 系统调用也是一种中断
    • 中断处理是从用户态进入内核态的主要方式
    • 当用户态切换到内核态时,就要把用户态寄存器上下文保存起来,同时要把内核态的寄存器的值放到当前CPU中
  • 进入及内核态是有中断触发,可能是硬件中断,也可能是Trap。
  • int指令触发中断机制会保存用户态堆栈顶地址、当时的状态字、当时的CS:EIP的值。

4.2 系统调用概述

知识点总结:

  • 系统调用的意义是操作系统为用户态进程与硬件设备进行交互提供了一组接口。
  • 一个API可能只对应一个系统调用,也可能内部由多个系统调用实现,一个系统调用也可能被多个API调用。
  • libc函数库定义的一些API内部使用了系统调用的封装例程,唯一目的是发布系统调用,每个系统调用对应一个系统调用的封装例程,函数库再用这些封装例程定义出给程序员调用的API。
  • 系统调用的三层机制分别为xyz(),system_call,sys_xyz()。
  • 系统调用举例:

实验

1.使用库函数API触发一个系统调用

C语言代码如下:

运行结果如下:

2.C代码中嵌入汇编代码出发一个系统调用

源代码如下:

运行结果如下:

3.代码分析


#include <stdio.h>
#include <unistd.h>
int main(void){
int u_id;
asm volatile(
"movl $0x14, %%eax\n\t" //将系统调用号赋给eax寄存器
"int $0x80\n\t" //执行系统调用
"movl %%eax, %0\n\t" //将系统调用执行后的返回值赋给变量tt
:"=m"(u_id)
);
printf("%u\n",u_id);
return 0;
}

总结

对系统调用机制的理解:

   所谓系统调用,简单的说,就是内核为用户提供的功能强大的函数。比如read ,write函数等这些函数都是在内核中编辑实现的,用户只需要把这些函数拿来用到自己的程序中即可,至于这些函数是如何实现和运行的,那是内核已经做好的事,用户只需知道这些函数有啥功能,如何使用即可。
  • 系统调用是用户态进程访问硬件的一种方式,它通过中断(int 0x80)由用户态进入内核态。
  • 应用程序应该以某种方式(库函数或汇编代码)通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态。
  • 系统调用最多使用6个寄存器作为参数(除eax外)-ebx,ecx,edx,esi,edi,ebp,如果超过6个参数,寄存器中将会保存一个指向内核态可以操作的一块的内存,参数保存在内存上面。

2019-2020-1 20199304《Linux内核原理与分析》第五周作业的更多相关文章

  1. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  5. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  6. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  7. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  10. 2018-2019-1 20189221《Linux内核原理与分析》第二周作业

    读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...

随机推荐

  1. PyCharm的几个使用技巧

      PyCharm是个十分强大的Python编辑器,笔者在日常的工作中学到了很多该IDE的使用技巧,有的是从别人那里学到的,有的是自己学习的.笔者深感自己的开发能力不足,因此希望能够将这些使用技巧记录 ...

  2. SpringBoot Web篇笔记(一)

    摘要 文章是根据江南一点雨(松哥)的视频进行总结 江南一点雨博客 全局异常处理 通常情况下,我们都需要对自己定义的异常进行相应的处理.捕获指定的异常方式如下: @ControllerAdvice pu ...

  3. vue-cli3.X快速创建项目

    1.安装 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过以下方式先卸载它: npm unin ...

  4. python——函数的基本概念

    Python函数认识 数学定义 y = f(x), y是x的函数,x是自变量. python中的函数组成 由若干语句组成的语句块.函数名称.参数列表构成,函数是组织代码的最小单元 像一个黑盒子,我们给 ...

  5. beacon帧字段结构最全总结(三)——VHT字段总结

    VHT Capabilities 802.11ac作为IEEE 无线技术的新标准,它借鉴了802.11n的各种优点并进一步优化,除了最明显的高吞吐特点外,不仅可以很好地兼容802.11a/n的设备,同 ...

  6. freeradius简单配置

    1.安装freeradius sudo apt-get update sudo apt-get install freeradius 2.配置client.conf vim /etc/freeradi ...

  7. ReentrantLock 如何实现非公平锁?和公平锁实现有什么区别

    reentrant 英[riːˈɛntrənt] 美[ˌriˈɛntrənt] 先学会读.单词原意是可重入的 考察显示锁的使用.可延伸知识点 独占锁 & 共享锁 独占锁 - 悲观锁(不能同时被 ...

  8. 创建基于OData的Web API - Knowledge Builder API, Part I:Business Scenario

    在.NET Core 刚刚1.0 RC的时候,我就给OData团队创建过Issue让他们支持ASP.NET Core,然而没有任何有意义的答复. Roadmap for ASP.NET Core 1. ...

  9. nyoj 517-最小公倍数 (python range(start, end) range(length))

    517-最小公倍数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:11 难度:3 题目描述: 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并 ...

  10. nyoj 206-矩形的个数 (a*b*(a+1)*(b+1)/4)

    206-矩形的个数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:16 提交数:37 难度:1 题目描述: 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1* ...