首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux系统调用原理

系统调用 是 Linux 内核提供的一段代码(函数),其实现了一些特定的功能,用户可以通过 int 0x80 中断(x86 CPU)或者 syscall 指令(x64 CPU)来调用 系统调用。...二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...Linux 使用寄存器来传递参数,参数与寄存器的关系如下: 第1个参数放置在 ebx 寄存器。 第2个参数放置在 ecx 寄存器。 第3个参数放置在 edx 寄存器。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。...下面我们通过 sys_open() 系统调用来说明一下 系统调用 的运作方式,sys_open() 实现如下: asmlinkage long sys_open(const char *filename

4.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

内核地址空间大冒险:系统调用

1 开启冒险之旅 我是一个线程,出生在这个Linux帝国,今天我的任务是去执行一段人类用C语言编写的代码。...“哦,是个2号,是要去sys_open啊”,说完,老头打开了墙上2号格子的抽屉,拿出了一个纸条交给我。...我一看,上面写着: sys_open: 0x7ffe10002030 “老先生,看来你对这里很熟嘛,还没看都知道我是要去sys_open”。...“到后来,一些新出现的帝国文明,像咱们的Linux帝国,还有Windows帝国等等,为了安全考虑,一方面把普通应用程序和帝国自身程序分开,普通应用程序执行的地方叫用户态地址空间,而帝国核心程序运行的地方叫内核地址空间...4 线程内核堆栈 按照纸条上面的地址,我来到了sys_open函数的地方,开始执行这里的代码,完成我要办理的事情。

67010

内核地址空间大冒险:系统调用

1开启冒险之旅 我是一个线程,出生在这个Linux帝国,今天我的任务是去执行一段人类用C语言编写的代码。...“哦,是个2号,是要去sys_open啊”,说完,老头打开了墙上2号格子的抽屉,拿出了一个纸条交给我。...我一看,上面写着: sys_open: 0x7ffe10002030 “老先生,看来你对这里很熟嘛,还没看都知道我是要去sys_open”。...“到后来,一些新出现的帝国文明,像咱们的Linux帝国,还有Windows帝国等等,为了安全考虑,一方面把普通应用程序和帝国自身程序分开,普通应用程序执行的地方叫用户态地址空间,而帝国核心程序运行的地方叫内核地址空间...4 线程内核堆栈 按照纸条上面的地址,我来到了sys_open函数的地方,开始执行这里的代码,完成我要办理的事情。

57410

linux_file_system

Linux 一切皆文件 首先通常在windows中是文件的东西,它们在linux中也是文件 其次一些在windows中不是文件的东西, 比如进程, 磁盘, 也被抽象成了文件....var/lib/mysql/mysql.sock srwxrwxrwx 6.管道 # pipe 7.符号链接文件 # softlink… 文件操作分析 open -> sys_open...与这些中断调用号对应是 一个函数指针数组: fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, sys_write, sys_open...sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask, sys_setreuid,sys_setregid }; 可以看到 sys_open...正好是在 第6个,必须要对应上的,所以说,我们 open一个文件,实际上最后是交给了 sys_open() 内核操作打开文件 (进程中维护文件指针数组) 我们来看下 sys_open int sys_open

1.8K10

Linux 直接IO 原理与实现

我们从 虚拟文件系统 开始跟踪 Linux 对 直接I/O 的处理过程。...当调用 open() 系统调用时,会触发调用 sys_open() 系统调用,我们先来看看 sys_open() 函数的实现: asmlinkage long sys_open(const char *...fd; ... } 打开文件的整个流程比较复杂,但对我们分析 直接I/O 并没有太大关系,之前在虚拟文件系统一章已经分析过,这里就不再重复了,可以参考之前的文章:虚拟文件系统 我们主要关注的是,sys_open...() 函数最后会调用 dentry_open() 把 flags 参数保存到文件对象的 f_flags 字段中,调用链:sys_open() -> filp_open() -> dentry_open(...f = get_empty_filp(); f->f_flags = flags; ... } 也就是说,sys_open() 函数会打开文件,然后把 flags 参数保存到文件对象的

1.6K10

虚拟文件系统

Linux系统中,可以使用多种文件系统来挂载不同的设备,如 ext2、ext3、nfs等等。...虚拟文件系统抽象数据结构 Linux奉行了Unix的理念:一切皆文件,比如一个目录是一个文件,一个设备也是一个文件等,因而文件系统在Linux中占有非常重要的地位。...注册文件系统 Linux为了支持不同的文件系统而创造了虚拟文件系统,虚拟文件系统更像一个规范(或者说接口),真实的文件系统需要实现虚拟文件系统的规范(接口)才能接入到Linux内核中。...打开文件 要使用一个文件前必须打开文件,打开文件使用 open() 系统调用来实现,而 open() 系统调用最终会调用内核的 sys_open() 函数,sys_open() 函数实现如下: asmlinkage...long sys_open(const char * filename, int flags, int mode) { char * tmp; int fd, error;

1.5K30

内核中断体系概括

的中断机制 1、分类 Linux的中断分为硬件中断和软件中断 硬中断:由电脑中主机的 8259A 类似的硬件中断控制芯片发出的中断或 ARM 中断控制器发出的中断 软中断:称为异常 第一类:CPU...自行保留的中断 第二类:系统调用异常 2、代码结构 汇编文件 对应的c文件 linux/kernel/asm.s trap.c linux/kernel/system_call.s fork.c signal.c...跳转回正常工作的函数地址继续运行 2、Linux 中中断的工作流程 ①....,中断后的回复过程 中断的执行过程 硬件中断的处理过程 linux/kernel/asm.s traps.c 软件及系统调用的处理过程 linux/kernel/system_call.s fork.c...sys_call_table 系统调用的操作码 fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, sys_write, sys_open

8410

操作系统学习笔记12 | 从生磁盘到文件 (转载非原创)

----参考资料:课程:哈工大操作系统(本部分对应 L29 && L30)磁盘管理共4层抽象,本部分为第3层,前两层在 笔记11实验:操作系统原理与实践_Linux - 蓝桥云课 (lanqiao.cn...2.3 索引存储结构联想前面键盘和显示器中 Linux 0.11 文件的读取方式,使用了一个 inode 的结构来存储文件信息并据此进行读取,这显然是一种索引结构。...2.4 多级索引结构由于上述优点和可解决的缺点,实际操作系统 如 Linux 和 Unix,使用的文件存储都是 基于 索引存储 的 多级索引结构。...通过 sys_open 建立从文件inode 到进程PCB的链;图片上图摘自我的笔记10,这个链本部分的配图也有。...fd,File Descriptor,文件描述符:这一点在学习笔记10 的 sys_open 处有所提及。

44030

三分钟基础:什么是权限管理(内核地址空间大冒险3)

来源:编程技术宇宙 作者:轩辕之风 前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作。...详情看参加这两篇 三分钟基础:什么是系统调用(内核地址空间大冒险2) 三分钟基础:什么是中断与异常(内核地址空间大冒险1) 1 open系统调用链 我是一个线程,出生在这个Linux帝国。...在老爷爷的指点下,通过系统调用表来到了这个叫sys_open的地方。这里很简陋,简单比划了几下就直接来到了do_sys_open的地盘。 ?...“UGO就是(User, Group, Other)的缩写,Linux帝国为所有文件针对所属用户、同组用户和其他用户分别设置了访问权限,Read、Write、Execute三种权限的组合,并把这些权限信息和文件的归属信息记录在了索引信息...“我们是Linux帝国进程分组控制管理部下辖的devices部门,在此奉命检查你是否有权限访问对应的设备,请配合我们的工作”,阿虎严肃正经的回答。

44410

内核地址空间大冒险3:权限管理

前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作。...详情参见:内核地址空间大冒险:系统调用 1 open系统调用链 我是一个线程,出生在这个Linux帝国。 在老爷爷的指点下,通过系统调用表来到了这个叫sys_open的地方。...“UGO就是(User, Group, Other)的缩写,Linux帝国为所有文件针对所属用户、同组用户和其他用户分别设置了访问权限,Read、Write、Execute三种权限的组合,并把这些权限信息和文件的归属信息记录在了索引信息...“我们是Linux帝国进程分组控制管理部下辖的devices部门,在此奉命检查你是否有权限访问对应的设备,请配合我们的工作”,阿虎严肃正经的回答。

41410
领券