《Linux内核与分析》第四周

20135130王川东

一、用户态、内核态和中断处理过程

CPU的几种不同的执行级别:

高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种执行级别对应内核态;

低级别执行状态下,代码的掌握范围会受到限制,只能在对应级别允许的范围内活动。

例:intel x86 CPU有四种不同的执行级别0-3,Linux只使用其中的0级和3级分别来表示内核态和用户态。

区分用户态和内核态:

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

CPU每条指令的读取都是通过cs:eip两个寄存器:cs:代码选择寄存器,eip:偏移量寄存器。

0xc0000000以上的地址空间只能在内核态下访问,

0x0000000-0xbfffffff的地址空间在二者状态下都可以访问(注:这里的地址空间是逻辑地址不是物理地址)

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

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

寄存器上下文

—从用户态切换到内核态时,

必须保存用户态的寄存器上下文,同时内核态的相应寄存器的相应的值

中断/int指令会在堆栈上保存一些寄存器的值。如:用户态栈顶地址、当前的状态字、当时的cs:eip的值。

中断发生和结束:

中断发生后第一件是保存现场(进行中断程序 保存 需要用到的寄存器的数据)

 中断处理结束前最后一件事是恢复现场(退出中断程序恢复保存寄存器的数据)

二、系统调用概述

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

API -:应用编程接口

与系统调用区别:

  API只是一个函数定义

 系统调用是通过软中断向内核发出一个明确的请求。

不是每一个API都对应一个系统调用:

  API可能直接提供用户态服务。如一个数学函数
  一个单独的API可能调用几个系统调用
  不同的API可能调用了同一个系统调用

返回值: 大部分封装例程返回一个整数,含义依赖于相应的系统调用

 -1在大多数情况下表示内核不能满足进程的请求
 Libc中errno变量包含特定出错码传参:内核实现很多不同的系统调用,需要传递一个名为系统调用号的参数,使用eax寄存器传递实验:选用24号系统调用:getuid。代码如下:1、使用库函数API:2,嵌入汇编代码:
时间: 2024-10-13 12:36:54

《Linux内核与分析》第四周的相关文章

第四周作业

第四周作业 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. (1)复制/etc/skel目录为/home/tuser1 [[email protected] ~]# cp -r /etc/skel/ /home [[email protected] ~]# mv /home/skel /home/tuser1 [[email protected] ~]# ll -a /home/tuser1/ total 2

#51CTO学院四周年#详解JWT的结构与应用

1. JWT是什么? JWT,全称JSON WEB TOKEN, 是WEB客户端与服务器之间相互进行安全通信的规范.通信双方的对象本身通过JSON传递数据是不安全的,但是由于有了数字签名的存在,这些信息变的可信的. 2. JWT特点 简洁(Compact): 可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快 自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库 3. JWT的应用场景 身份认证:当用户在客户端完成

51CTO四周年——米的感悟

不知不觉,我已经来到这里一年多了,2016年4月4号,我偶然发现了这个网站,当时刚学完思科的四门基础课程,对网络很感兴趣,想要一直从事这个行业,于是我找到老师,说明了自己的想法,老师鼓励我去考CCNA认证,我觉得是一个很好的锻炼机会和学习机会,就四下寻找资源. 在找到这个网站,准确的说,是找到晁海江老师的课程之后,我内心狂喜,仔细研究了一遍课程大纲后,试听下来,觉得晁老师讲的很不错,我也喜欢听他的声音,所以就购买了全套课程.从那以后,我冲着考CCNA这个目标,十分刻苦努力地学习起来,每一天都有期

第十四周学习进度

时间 十四周 学习时间 78小时 代码量 1623行 所学知识 临近期末,学习任务越来越重,用在专业技术学习上的时间相对减少了很多.不过这周还是有些收获的.首先是数据结构作业的完成,我头一次使用Qt写了一个图形界面.以前我学习Qt是总觉得它晦涩难懂,但是这次我只是看了看学习视频,觉得容易多了.虽然当下图形界面不是很热门,但是学了两年的计算机,连一个图形界面都写不出来还是很尴尬的,所以以后若是有时间还是应该好好学学.

20140256985《嵌入式程序设计》第三、四周学习总结

1.第三四周学习情况 上课能跟上,而且新的虚拟机非常好使,编辑代码的时候很是方便,没有上一个虚拟机那么复杂,非常好用! 2实验楼学习内容    (1).安装并解压arm-linux-gcc交叉编译工具 (2).测试arm-linux-gcc是否可运行 (3).解决64位系统下安装32位软件的问题和 (4).将arm-linxu-gcc加入环境变量PATH中 (5).bootboader的配置,移植和编译 解压文件 建立板级支持包 修改eduk2410文件 修改Makefile文件 编译U-Boo

每周学习进度--第四周

  第四周 所花时间(包括上课) 270min 代码量 324 博客量 1 了解到的知识点 Java编写简单工厂模式和工厂方法模式

每周总结(第十一至第十四周)

   第十一周(5.9-5.15) 第十二周(5.16-5.22) 第十三周(5.23-5.29) 第十四周(5.30-6.9)  所花时间   没有记录   没有记录  没有记录   没有记录  代码量  50行  136行  126行  60行(团队计划的项目)  博客量 四篇  两篇  一篇  一篇  了解到的知识点 界面上按钮跟下一界面的链接 主要页面布局以及按钮 databasehelper数据库调用 图片背景插入,背景的修改(未实现)

学习进度条(十四周)

本周主要是继续完成第二次冲刺周期,期间完成了一个计算购买书籍的最低费用的小程序.   第十四周 所花时间(包括上课) 上课2小时,课后9小时 代码量(行) 200+ 博客量 8 了解到的知识点 团队绩效管理

学习进度第十四周

  第十四周 所花时间(包括上课) 16h(4h上课,12课下) 代码量(行) 400 博客量(篇) 10 了解到的知识点 1.这个星期进行了一次求最优惠价格的课堂练习编程,在老师的引导下,才有了思路. 明白了在没有规律的情况下,我们不能因为没有思路就停滞不前,哪怕穷举也应进行下去,说不定就发现规律了呢. 2.完成了软件工程团队开发的第二阶段的冲刺,对蓝牙通信的实现有了一定的经验

周记,第十四周

周数 专业学习目标 专业学习时间 新增代码量 博客发表量(总计) 人文方面的学习/知识技能   第十四周 计算机网络基础:完成学习任务,复习一部分: Web技术基础:学习调用外部css文件,学习背景的美化: 数据结构与算法:了解最小生成树.最短路径.以及图的应用. 6.5h 200左右 16 初步完成个人主页的模块