kernel学习之系统调用在用户空间的访问

这篇文章是对上篇的一个补充。

如何使用系统调用

1、通过c库来使用系统调用

2、在2.6.18之前的内核使用_syscall宏来使用系统调用。

3、在2.6.19开始废除了_syscall,而使用syscall()通过向函数提供调用号和参数实现调用

c语言中系统调用

#include <unistd.h>  

#include <stdio.h>  

#include <sys/syscall.h>  

#include <sys/types.h>  

int main()  

{  

     pid_tpid;  

     printf("%d\n",syscall(224));  

     return0;  

}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/unix/

若是用汇编实现系统调用,没有参数时init $0x80即可,若有参数还要把参数压栈。汇编和你使用的平台有关。

为什么要用系统调用:

1、系统调用可以提供给用户空间访问硬件资源的接口,从而应用程序不用关心具体的硬件细节。如在读写文件时,用户空间不会关心磁盘的类型和哪种文件类型。

2、系统调用可以对系统进行保护,使系统更稳健和安全。系统调用的存在规定了用户进程进入内核的具体方式,即用户访问内核的路径是事先规定好的。

出处:http://blog.csdn.net/muge0913/article/details/7518556

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索include
, 内核
, 参数
, 系统
, 空间
用户
,以便于您获取更多的相关知识。

时间: 2024-09-16 02:54:58

kernel学习之系统调用在用户空间的访问的相关文章

kernel学习之系统调用过程分析

过程分析: 1.系统调用需要一个用户空间到内核空间的转换,不同的平台有不同的指令来完成这样的转换,这个指令也叫做操作系统陷入(operating systemtrap)指令.在linux中对于x86来说是用软中断0x80,也即是int $0x80.软中断由软件指令触发,硬中断由硬件触发. 通过软中断,系统会跳到一个预定的内核空间.它指向了系统调用处理程序(不是系统调用服务程序)system_call函数(arch/x86/kernel/entry32.h).如上图. 2.system_call到

kernel学习:系统调用的知识点

一般情况下,用户进程是不能访问内核空间的.它既不能访问内核中的数据,也不能访问内核中的函数.但在linux内核中设置了一组用于实现各种系统功能的函数,成为系统调用.用户可以在应用程序中调用它们. linux系统还提供了一些c库,这些库对系统调用进行了一些包装和扩展. 系统调用,POSIX,C库,系统命令和内核函数 1.系统调用和POSIX 虽然系统调用是内核和用户空间的桥梁,但是用户的应用程序在访问内核时是通过系统提供的应用编程接口API来实现的. 操作系统的API主要作用是把操作系统的功能全展

kernel学习:分层方法讨论linux文件系统

文件系统是对一个存储设备上的数据和元数据进行组织的机制. Linux 文件系统接口实现为分层的体系结构,从而将用户接口层.文件系统实现和操作存储设备的驱动程序分隔开.另一种看待文件系统的方式是把它看作一个协议.网络协议(比如 IP)规定了互联网上传输的数据流的意义,同样,文件系统会给出特定存储媒体上数据的意义. Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子.通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统.例如,read 函数调用可以从指

linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间

转载 - linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间 作者 digoal 日期 2016-11-20 标签 Linux , 用户空间 , 内核空间 , 用户态 , 内核态 , 进程上下文 , 中断上下文 背景 原文 http://blog.csdn.net/bingqingsuimeng/article/details/7924756 原文 linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及

User space(用户空间)和 Kernel space(内核空间)

学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间). 简单说,Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运行空间.为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响. Kernel space 可以执行任意命令,调用系统的一切资源:User space 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称 system call),才能向内核发出指令. = "m

Linux系统调用及用户编程接口(API)学习

Linux系统调用 系统调用指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过 这组"特殊"接口来获得操作系统内核提供的服务. 为什么用户程序不能直接访问系统内核提供的服 务呢?这是由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为用户空间和内核空间(也就是 常称的用户态和内核态),它们分别运行在不同的级别上,逻辑上是相互分离的.因此,用户进程通常情况下 不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间

用户空间与内核空间,进程上下文与中断上下文[总结]

1.前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文.看着很熟悉,半天又说不出到底是怎么回事,有什么区别.看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解. 2.用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保

kernel学习之sys_fork,sys_vfork,sys_clone和kernel_thread

用户空间进程创建接口:fork,vfork,clone函数,这里只做简单说明. fork:使用该系统调用时,子进程复制父进程的全部资源.由于要复制父进程进程描述符给子进程(进程描述的结构很大!!),这一过程开销是很大的.linux采用了"写时复制技术"(copy on write,COW),使子进程先共享父进程的物理页,只有子进程进行写操作时,再复制对应的物理页,避免了无用的复制开销,提高了系统的性能. 实现代码(x86):arch/x86/kernel/process.c int s

kernel学习:内核线程

由于内核对进程和线程不做区分,所以内核线程(kernel thread)又称为内核进程(kernel process).注意不能把普通进程中的线程理解为进程. 内核线程和普通进程的区别: 1.内核线程只运行在内核态,普通进程可以运行在内核态和用户态. 2.内核线程只能调用内核函数,普通进程可以通过系统调用调用内核函数. 3.内核线程只能运行在大于PAGE_OFFSET的地址空间,而普通进程可以4G的地址空间(除了访问用户空间的3G,通过系统调用可以访问内核空间的1G空间). 由于内核线程不受用户