Linux内核第四节 20135332武西垚
实验目的:
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
实验过程:
查看系统调用列表

get pid 函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
pid_t tt;
tt = getpid();
printf("%u\n", tt);
return 0;
}
使用API函数系统调用
API侧重于向上层提供给定的服务,而系统调用则侧重于通过软中断向下层的内核发出一个明确的请求。API属于用户态,而系统调用属于内核态。
操作系统提供的API函数库都会遵循一定的标准,以实现应用程序在不同的系统之上的可移植性。标准规定了API的向上提供的接口,至于API的功能如何实现的,各个操作系统可以有所不同。
API是提供给应用程序的接口,其实现的功能不仅仅只是底层的服务和资源,还包括封装了其他的应用程序,因此,API和系统调用没有必然的联系。第一:一个API可以不调用任何系统调用,只提供用户态的服务(如数学运算的函数)。第二:一个API可能调用多个系统调用。第三:多个API可以调用封装了不同功能的同一系统调用。
实验截图:

C代码中嵌入汇编代码使用系统调用
实验代码:
#include <stdio.h>
#include <unistd.h>
int main(){
uid_t uid;
gid_t gid;
asm volatile(
"mov $0x18,%%eax\n\t"
"int $0x80\n\t"
"mov %%eax,%0\n\t"
:"=m"(uid)
);
printf("uid = %d, gid = %d\n", uid, gid);
return 0;
}
实验截图:


系统调用的原理:
系统中的程序类型及状态
系统功能调用
Linux操作系统中的系统调用接口
Linux内核第四节 20135332武西垚的更多相关文章
- Linux内核第五节 20135332武西垚
20135332武西垚 在MenuOS中通过添加代码增加自定义的系统调用命令 使用gdb跟踪调试内核 简单分析system_call代码了解系统调用在内核代码中的处理过程 由于本周实验是在Kali虚拟 ...
- Linux内核第六节 20135332武西垚
如何描述一个进程:进程描述符的数据结构: 如何创建一个进程:内核是如何执行的,以及新创建的进程从哪里开始执行: 使用gdb跟踪新进程的创建过程. 进程的描述 操作系统三大功能: 进程管理(最核心最基础 ...
- Linux内核第七节 20135332武西垚
预处理.编译.链接和目标文件的格式 可执行程序是怎么得来的 以C语言为例,c代码经过编译器的预处理,编译成汇编代码,由汇编器编译成目标代码,再链接成可执行文件,由操作系统加载到cpu里来执行. (截图 ...
- Linux内核总结博客 20135332武西垚
http://www.cnblogs.com/wuxiyao/p/5220677.htmlhttp://www.cnblogs.com/wuxiyao/p/5247571.htmlhttp://www ...
- Linux内核第三节 20135332武西垚
总结部分: Linux内核源代码: Arch 支持不同cpu的源代码:主要关注x86 Init 内核启动的相关代码:主要关注main.c,整个Linux内核启动代码start_kernel函数 K ...
- Linux内核第八节 20135332武西垚
第一种分类: I/O-bound:频繁进行I/O,并且需要花费很多时间等待I/O完成 CPU-bound:计算密集,需要大量的CPU时间进行运算 第二种分类: 批处理进程:不必与用户交互,常在后台进行 ...
- (笔记)Linux内核学习(四)之系统调用
一 用户空间和内核空间 Linux内核将这4G字节虚拟地址空间的空间分为两部分: l 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”. l ...
- linux内核(四)内存管理单元MMU
1,基本概念 一个程序运行时没必要全部都同时装入内存,只需要把当前需要运行的部分装入内存即可,这样就使得一个大程序可以在较小的内存中运行,也使得内存中可以同时装入更多的程序并发执行,从用户角度看,该系 ...
- Linux内核第二节
作者:武西垚 深入理解函数调用堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间 堆栈的作用 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 esp,堆栈指针,指 ...
随机推荐
- 搜索插入位置的golang实现
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 输入: [,,,], 输出: 输入: [,,,] ...
- one_code=soup.find('a',href=re.compile(r"ill")) NameError: name 're' is not defined
啊啊啊啊我又来了,真的是万事开头难啊,一个问题刚解决,又来了一个问题..依旧跟着视频教学,说“re"这里按Ctrl+e导入正则表达式,可我弄了半天也没有反应..以至于最后的运行结果就是这样. ...
- 【BZOJ3930】选数
[BZOJ3930]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选 ...
- python六十二课——高阶函数之filter
高阶函数之:filter函数:过滤数据的,最终返回一个惰性序列对象(filter对象,迭代器对象)解释:filter的意思:在计算机领域中我们都称为过滤器格式:filter(fn,lsd):参数和ma ...
- console.time和console.timeEnd用法
console.time和console.timeEnd这两个方法可以用来让WEB开发人员测量一个javascript脚本程序执行消耗的时间.随着WEB应用越来越重要,JavaScript的执行性能也 ...
- Python基础(4)列表、元组、字符串、字典、集合、文件操作
列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 详见:http://www.cnblogs.com/alex3714/articles/5717620.html 1.列表和元 ...
- parallel方法 异步并行执行
Promise提供了all方法, 但是状态只有2种, 第一种是所有promise实例都成功则返回值组成一个数组,传递给p的回调函数: 第二种是有一个实例被rejected,状态就变成rejected, ...
- 学习CSS布局 - 没有布局
如果你只想把所有内容都塞进一栏里,那么不用设置任何布局也是OK的. 然而,如果用户把浏览器窗口调整的很大,这时阅读网页会非常难受: 读完每一行之后,你的视觉焦点要从右到左移动一大段距离. 试着调整下浏 ...
- ftp 传输数据:命令链路连接方法是一样的,而数据链路的建立方法就完全不同
0.FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. PORT(主动)连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链 ...
- 解决Skyline 6.5版本中3DML模型单体化后外部网页挂接问题
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...