2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中是通过int $0x80来执行系统调用的,这条汇编指令产生向量为128的编程异常 传参:内核实现了很多不同的系统调用,进程必须指明需要哪个系统调用,这需要传递一个名为系统调用号的参数(使用eax寄存器) 系统调用也需要输入输出参数,例如:实际的值.用户态进程地址空间的变量的地址.包含指向用户态函数的指针的数据…
<Linux内核原理与分析>第五周作业 一.上周问题总结: 虚拟机将c文件汇编成汇编文件时忘记添加include<stdio.h> gdb跟踪汇编过程不熟练 二.本周学习内容: 1.课本学习 1.1 用户态.内核态和中断 内核态:处于高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态,对所有的指令包括特权指令都可以执行. 用户态:处于低的执行级别下,代码只能在级别允许的特定范围内活动.在日常操作下,执行系统调用的方式是通过库函数,库函数封装系统调用,…
1.问题描述 在前面的文章中,已经了解了Linux内核源代码的目录结构,并在Oracle VM VirtualBox的Linux环境中构造一个简单的操作系统MenuOS,本文将学习系统调用的相关理论知识,使用库函数API和C代码中嵌入汇编代码两种方式使用getpid()系统调用. 2.解决过程 2.1 系统调用 上图所示,Linux操作系统的体系架构在宏观上分为用户态和内核态. 用户态:在用户态下,代码能够掌握的范围会受到一定限制. 内核态:在内核态下,代码可以执行特权指令,访问任意的物理内存.…
关于linux内核源码 两个很关键的目录,一个是arch(architecture),支持不同cpu体系架构的源代码,其中最重要的就是x86(一般把x86留下,其他的目录删掉),另一个是init(其中的main.c是整个linux内核启动的起点,不过这里面不是main()函数,而是一个叫start_kernel的函数),linux内核的核心代码在kernel目录中.上一节中的命令make allnoconfig就是关闭所有的可选项,目的是可以让之后的编译更快的完成. 实验分析 由于这一周自己的电…
课本:第4章 系统调用的三层机制(上) -用户态.内核态和中断 -用户态:在低的执行级别下,代码能够掌控的范围有所限制,只能访问部分内存. -内核态:在高的执行级别下,代码可以执行特权指令,访问任意的物理内存. -中断:从用户态进入内核态的主要方式. -中断类别 - 硬件中断:在用户态进程执行时,硬件中断信号到来,进入内核态,就会执行这个中断对应的中断服务例程. - 软中断:在用户态进程执行过程中,调用了一个系统调用(一种特殊中断),进入内核态. 寄存器上下文切换 当用户态切换到内核态时,就要把…
攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 一.实验要求: 1.选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl 2.参考视频中的方式使用库函数AP…
一.实验:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 环境说明 实验环境为 Ubuntu16.10 和 实验楼环境. 选择39号系统调用实验.39号系统调用为mkdir系统调用. 实验步骤 有关mkdir系统调用的具体介绍见 linux api 函数--mkdir 1.用库函数实现mkdir系统调用 代码很简单: #include <sys/stat.h> #include <sys/types.h> void main(){ char *p = "…
<Linux内核分析> 第四章 系统调用的三层机制(上) 4.1 用户态.内核态和中断 与系统调用打交道的方式是通过库函数的方式 用户态与内核态的区分 内核态:高的执行级别下,代码可以执行特权指令,访问任意的物理内存 用户态:低级别指令 系统调用也是一种中断 中断处理是从用户态进入内核态的主要方式 当用户态切换到内核态时,就要把用户态寄存器上下文保存起来,同时要把内核态的寄存器的值放到当前CPU中 4.2 系统调用概述 系统调用的意义: 错做系统为用户态进程与硬件设备进行交互提供了一组接口 系…
第五周学习内容 庖丁解牛Linux内核分析第四章:系统调用的三层机制(上) Linux内核分析实验四 学到的一些知识 4.1用户态.内核态.中断 宏观上Linux操作系统的体系架构分为用户态和内核态 Intel x86 CPU有4种不同的执行级别,分别是0.1.2.3,数字越小,特权越高,而Linux只采用了0,3两个特权级别,分别对应内核态和用户态,用户态和内核态很显著的区分方法就是CS:EIP的指向范围,拿32位系统来说,总共有2的32次方地址空间,也就是4GB,内核态可以访问全部地址空间,…
第五周作业主要是选择一个系统调用(13号系统调用time除外),使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,在实验楼Linux虚拟机环境下完成实验. 系统调用的列表参见 http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl #include <stdio.h> #include <unistd.h> int main(void){ pid_t tt; as…