深入理解Linux内核-系统调用

系统调用:用户态进程向内核发出的,实现用户态进程调用硬件设备的函数或者中断;优点:使编程更容易,将用户从学习硬件设备的低级编程特性中解放;提高系统到安全性,内核在满足请求之前可以做正确性检查;提高可移植性;

系统调用与API调用的区别:1、API调用是一个函数定义;系统调用是通过软中断向内核发出的明确请求2、内核不可以访问库函数

内核中,返回值为正数或者0表示系统调用成功结束,否则表示出错条件

进入内核态的两种方式:1、执行 int $0x80 指令 ;2、执行 sysenter 指令内核推出系统调用方式:1、执行 iret 指令; 2、使用sysexit指令

系统调用传递参数:1、它将参数保存在CPU寄存器,然后由内核去读取;不能直接讲参数从用户态栈传递到内核态栈,原因是这样会更复杂2、受寄存器的限制,参数的个数不能超过6个;多余6个可以通过传参数集合的地址3、参数的长度受寄存器的限制,不能超过32bit,同样可以通过传地址解决。

参数检查:1、
时间: 2024-10-09 07:52:02

深入理解Linux内核-系统调用的相关文章

【深入理解Linux内核】《第一章 绪论》笔记

1.商用Unix操作系统包括: - AT&T公司开发的(System V Release 4) SVR4. - 加州伯克利分校发布的4.4BSD - Dec公司(现属于HP)的Digital Unix - IBM公司的AIX - HP公司的HP-UX - Sun公司的Solaris   - Apple公司的Mac OS X 所有商业版本都是SVR4或4.4BSD的变体,并且都趋向于遵循某些通用标准:如IEEE的POSIX(Portable Operating Systems based on U

20150514我读《深入理解linux内核》之虚拟文件系统笔记

20150514我读<深入理解linux内核>之虚拟文件系统笔记 2015-05-14 Lover雪儿 虚拟文件系统所隐含的思想就是把很多不同种类的文件系统的共同信息放入内核,其中有一个字段或者函数来支持Linux所支持的所有实际文件系统所提供的任何操作.对所调用的每个读.写或者其他函数,内核都能把他们替换成支持本地Linux文件系统.NTFS文件系统,或者文件所在的任何其他文件系统的实际函数. 虚拟文件系统可以称为虚拟文件系统转换,是一个内核软件层,用来处理与Unix标准文件系统相关的所有系

linux内核系统调用--sendfile函数

在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile到底是什么呢?它的原理又是如何呢? 在传统的文件传输里面(read/write方式),在实现上其实是比较复杂的,需要经过多次上下文的切换,我们看一下如下两行代码: Java代码 read(file, tmp_buf, len); write(socket, tmp_buf, len); 以上两行代码是传统的read/wr

【笔记】深入理解Linux内核--内存寻址(一)

<深入理解Linux内核>中关于内存管理一共有三章,这是其中的一章,还有第八章,讨论内核怎样给自己分配主存,以及第九章,考虑怎样给进程分配线性地址. 内存地址 -- (P40) 以下三种地址是相对与8086处理器来说的. 逻辑地址(logical address) 包含在机器语言指令中用来指定一个操作数或一条指令的地址.比如下面反汇编代码中最左边的地址即逻辑地址. 1 40052d: 55 push %rbp 2 40052e: 48 89 e5 mov %rsp,%rbp 3 400531:

Linux内核-系统调用

Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间增加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每个进程都运行在虚拟系统中的考虑 #系统调用是用户空间访问内核的唯一手段 2.API.POSIX和C库 #应用程序通过API而不是直接系统调用来编程 #一个API定义了一组应用程序使用的编程接口 3.系统调用 #内核必需提供系统调用所希望完成的功能,但它完全可以按照自己的方式去实现,只要最后结果正确 #所有的系

【深入理解Linux内核】《第二章 内存寻址》笔记 (2014-06-28 12:38)

2.1 内存地址 逻辑地址:段+偏移 线性地址(虚拟地址) 物理地址 2.2硬件中的分段 2.2.1 段选择符和段寄存器 15                                                3  2  1   0 ------------------------------------------------|                                                    |TI |RPL  ||         索引号 

【读书笔记::深入理解linux内核】内存寻址

我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开启分页之后,任何寻址都要经过mmu的转换,也就是一个二级查表的过程(386) 难道内核很特殊,当mmu看到某个逻辑地址是内核传来的之后,就不查表了,直接减去0xC0000000,然后就传递给内存控制器了??? 我发现网上也有人和我问了同样的问题,看这个问题 这句话太让人费解了,让人费解到以至于要怀疑

linux内核系统调用和标准C库函数的关系分析

今天研究了一下系统调用和标准库函数的区别和联系,从网上搜集的资料如下: 1.系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,比如你自己编写一个函数其实也可以说就是一个库函数. 2.系统调用可以理解为内核提供给我们在用户态用的接口函数,可以认为是某种内核的库函数. 3.read就是系统调用,而fread就是C标准库函数. 4.很多c函数库中的函数名与系统调用的名称一样是因为该函数本身其实就是调用的系统调用,放到c函数库就是为了用户态的使用 5.写程序直接使用的

【深入理解Linux内核架构】第3章:内存管理

3.1 概述 内存管理涵盖了许多领域: 内存中物理内存页的管理: 分配大块内存的伙伴系统: 分配小块内存的slab.slub.slob分配器: 分配非连续内存块的vmalloc机制: 进程的地址空间. Linux内核一般将虚拟地址空间划分为两部分:底部较大的部分用于用户进程,顶部则用于内核.虽然(在两个用户进程之间)上下文切换期间会改变下半部分,但是虚拟地址空间的内核部分中总是不变[这其实很好理解,内核是系统管理员,不能说因为每换一批游客,景区管理员都得跟着换一批?!].在IA-32系统上,虚拟

深入理解Linux内核day09--系统调用

系统调用 操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等等)进行交互提供了一组接口. Unix系统通过向内核发出系统调用(system call)实现用户态进程和硬件设备之间的大部分接口. POSIX API和系统调用 让我们先强调下应用编程接口(API)与系统调用之间的不同.前者只是一个函数定义,说明了如何获得一个给定的服务:而后者是通过软中断向内核态发出一个明确地请求. Unix系统给程序员提供了很多API的库函数.libc的标准C库所定义的一些API引用了封装例程(wra