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

LinuxLinux系统调用

Linux系统调用 前言 操作系统——管理计算机硬件与软件资源的软件,是用户和系统交互的操作接口,为它上面运行的程序提供服务。...操作系统内核——操作系统的内核,负责管理系统的进程、内存、设备驱动程序、文件和网络系统。一个内核不是一套完整的操作系统。例如LinuxLinux操作系统——基于Linux内核的操作系统。...Linux的运行空间: Linux的运行空间:内核空间+用户空间 ---- 内核空间——存放的是整个内核代码和所有内核模块,以及内核所维护的数据。 用户空间——用户程序的代码和数据。...---- 系统调用的实现 通过软件中断实现。 **软件中断:**它是通过软件指令触发的中断。Linux系统内核响应软件中断,从用户态切换到内核态,执行相应的系统调用。...调用相应的执行程序来处理系统调用。 从系统调用返回。 系统调用号: 每个系统调用被赋予一个系统调用号,与具体的系统调用相关联。

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

Linux 系统调用

Linux 中,系统调用是用户空间访问内核的唯一手段﹔除异常和陷入外,它们是内核唯一的合法入口。实际上,其他的像设备文件和/proc之类的方式,最终也还是要通过系统调用进行访问的。...而有趣的是,Linux 提供的系统调用却比大部分操作系统都少得多。 要访问系统调用(在 Linux 中常称作 syscall),通常通过C库中定义的函数调用来进行。...系统调用在出现错误的时候C库会把错误码写人errno全局变量。通过调用perror()库函数,可以把该变量翻译成用户可以理解的错误字符串。 在 Linux 中,每个系统调用被赋予一个系统调用号。...这样,通过这个独一无二的号就可以关联系统调用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就用来指明到底是要执行哪个系统调用;进程不会提及系统调用的名称。...假设系统调用在内核空间定义为 sys_ioctl,那么该系统调用的用户空间接口为 ioctl Linux kernel-5.18.8 有 440 个系统调用,这些系统调用讲究通用性,一旦固定,很少修改,

9.7K20

Linux系统调用原理

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

4.1K30

Linux系统调用过程

1 系统调用的作用 系统调用是操作系统提供给用户(应用程序)的一组接口,每个系统调用都有一个对应的系统调用函数来完成相应的工作。用户通过这个接口向操作系统申请服务,如访问硬件,管理进程等等。...2 系统调用过程 http://www.linuxidc.com/Linux/2015-04/116546.htm 系统调用是操作系统提供给用户(应用程序)的一组接口,每个系统调用都有一个对应的系统调用函数来完成相应的工作...2.根据系统调用号取出系统调用函数在系统调用表的基地址,得到一个系统调用函数的函数指针 3....声明自己的系统调用函数 在include/linux/syscall.h添加asmlinkage long sys_pk() 用户空间:       void pk()   {     __asm__...声明自己的系统调用函数 在include/linux/syscall.h添加asmlinkage long sys_pk() 用户空间:       void pk() { __asm__( "

4.7K70

详解linux系统调用原理

被 软中断 打断后,执行 中断处理函数 ,即 系统调用处理函数 ( system_call ); 系统调用处理函数 调用 系统调用服务例程 ( sys_xyz ),真正开始处理该系统调用; 执行态切换...而 库函数 与 系统调用处理函数 之间,由于涉及用户态与内核态的切换,要复杂一些。 Linux 通过 软中断 实现从 用户态 到 内核态 的切换。...在 Linux 中, 系统调用号 一般通过 eax 寄存器 来传递。...; 系统调用处理函数 准备 内核执行栈 ,并保存所有 寄存器 (一般用汇编语言实现); 系统调用处理函数 根据 系统调用调用对应的 C 函数—— 系统调用服务例程 ; 系统调用处理函数 准备 返回值...第 12 行,准备 系统调用号 :将常数 4 放进 寄存器 eax 。 系统调用号 4 代表 系统调用 SYS_write , 我们将通过该系统调用向标准输出写入一个字符串。

4.1K43

Linux 库函数与系统调用

所有 C 函数库是相同的,而各个操作系统系统调用是不同的。 函数库调用调用函数库中的一个程序,而系统调用调用系统内核的服务。...五、正确理解库函数高效于系统调用 首先解释,上述说明的库函数性能远高于系统调用的前提是,库函数种没有使用系统调用。再来解释某些包含系统调用的库函数,然而其性能确实也要高于系统调用。...比如上篇文章中关于文件 IO 函数 fread、fwrite、fputc、fgetc 等,这些函数通常情况性能确实比系统调用高,原因在于这些库函数使用了缓冲区,减少了系统调用的次数,因而显得性能比较高...当一个进程正在运行,遇到读写文件操作,会发生一个中断,中断后系统会把当前用户进程的一些寄存器信息保存在内核堆栈中,接着去处理中断服务程序,这里是要去执行系统调用Linux 中通过执行 int $0x80...来执行系统调用的中断,但内核实现了很多系统调用,这时需要传递「系统调用号」来指明需要哪个系统调用

7.3K30

【高级编程】Linux read系统调用

最近一个项目做了一个模拟u盘的设备,但是在read虚拟u盘的内容时必须每次都从磁盘内读取,而不是从系统的cache中读取,由于这个问题,就查资料看了read的系统调用,以及文件系统的一些内容。...比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统的内容呢,其实这可以看做对内核的保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间的数据的...引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。...文件的page cache结构 在 Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件 中写数据时...为了满足普遍性要求,linux使用定义在linux/fs.h中的结构体address_space结构体描述页高速缓存中的页面。

5.9K110

Linux系统编程:基本IO系统调用

文件描述符使用int类型表示,文件描述符的范围从0开始,到上限值-1,默认情况,上限值为1024,也就是说,进程默认情况最多可以打开1024个文件。...open()系统调用 对文件进行读写之前,必须先打开文件。Linux提供了系统调用open()。...总结起来可以得到这样一条公式: newmode = mode ^ (~ umask) 总结一:至此,我们了解了文件打开所提供的两个系统调用函数open(),了解了打开文件的方式、新建文件的访问权限设置...read()系统调用 文件打开后,就能够读文件了。read()是最基础、最常见的读取文件的机制。...Linux系统也支持强制文件立即写入磁盘上,这在后面介绍。 close()系统调用 程序完成文件的读写后,调用close函数关闭文件描述符与文件之间的连接,使得文件描述符可以被重用。

3K30

Linux——系统安装(

接下来我们要进行系统分区,其实就跟windows系统分盘一样,首先我们要选择“标准分区” 图23 然后在这里选择挂载点,默认都是ext4,我们后面要创建的swap是在文件系统类型中进行修改 图24...下一步” 图26 然后要选择一些安装的软件,选择“Basic Server”,接下来就会进入程序安装 图27 等待安装完成后,点击“重新引导“ 图28 接下来进过一系列傻瓜式的操作之后,就能看到Linux...的登陆界面了,账号默认是root,密码是你刚刚设置的密码 图29 Linux安装就讲到这里,接下来我会讲两个VMware虚拟机常用的一些小技巧 l 屏幕快照 VMware虚拟机提供了一个类似于PS中的快照功能...,该功能就是将你当前的状态进行存储下来,如果在以后的某个时间你误操作了系统,将系统损毁或是其他情况,需要恢复,那么就可以调用之前的快照,完美恢复到快照的情况 图30 l 克隆 如果你需要多个和你当前操作系统一模一样的虚拟机...,你可以不必重新创建然后安装,直接克隆即可,而且这个克隆还有个好处,就是不会占用你原本虚拟机大小的内存空间,只会占用一点点内存空间,但是能实现的功能都是一样的 图31 现在,Linux就安装完成了,如果你在安装过程中有任何问题

10.6K50

说说Linux系统调用那些事儿

与函数调用相比,系统调用的开销要大一些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。...减少这种开销的一个好办法是,在程序中尽量减少系统调用的次数,并且让每次系统调用完成尽可能多的工作。 下面我们通过几个简单的栗子来说明一为什么会这样。 ....减少系统调用的次数的例子 下面我们改变数据块的大小,再来测试一,这样做可以减少系统调用的次数,下面是这个程序: /*copy_system2.c*/ #include #include...; 如果不可避免的使用了系统调用,那么就充分利用这次系统调用,让它完成尽可能多的工作。...Linux 程序设计(第四版). 人民邮电出版社 https://www.jianshu.com/p/2c60d669c9fb

1.5K20

Linux 内核】进程管理 ( 系统调用简介 | 进程相关系统调用源码 )

文章目录 一、系统调用简介 二、进程相关系统调用源码 一、系统调用简介 ---- 在开发应用程序时 , 进行 " 进程创建 " , 调用的 fork() , vfork() , clone() 等函数..., 就是 " 系统调用 " ; " 系统调用 " 是 操作系统 提供的 应用程序 调用 内核功能 的接口 , 如 : 创建进程 , 文件操作 等 ; 系统调用 与 内核 的关系 : 在 应用进程 中调用...fork() 系统调用 函数 , 实际上调用的是 Linux 内核中的 sys_fork() 函数 ; 在 应用进程 中调用 vfork() 系统调用 函数 , 实际上调用的是 Linux 内核中的...sys_vfork() 函数 ; 在 应用进程 中调用 clone() 系统调用 函数 , 实际上调用的是 Linux 内核中的 sys_clone() 函数 ; Linux 内核中的 sys_fork...---- Linux 进程相关 " 系统调用 " 对应的源码在 linux-5.6.18\kernel\fork.c 源码中 ,

2.1K20
领券