系统调用system call为什么是在进程上下文? 5C

看了网上很多问答,几乎没有人说清楚这个问题,请懂的人回答下,
system call是软中断,为什么不是中断上下文,而中断下半部softirq和tasklet为何是中断上下文(因为是软中断,所以是能够理解的)。

systemcall和中断发生区别在哪里?current都是有效的,是system call做了特殊处理吗?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
5_gdb跟踪分析系统调用system_call的处理过程
版权声明:陈诚 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ==========================================================================
系统调用system_call的处理过程
关于system_call,虽然它有函数申明,但它其实是关于系统调用的一段汇编代码的起点,所以使用gdb无法跟踪到它。 下面我们通过实验来了解system_call的处理过程,首先我们需要用一个新的内核,然后把我们的系统调用函数加载进去:                然后使用make rootfs重新编译一下,就能看到新加载进去的系统调用了, 接下来
操作系统学习笔记_01_OS概念简述
操作系统的概念操作系统没有公认的定义,本文只对它的几个侧面进行尽量详尽的描述。操作系统是一组控制程序的集合,相当于计算机系统的内核(区分于系统程序和应用程序)。操作系统在开机后保持运行,其工作环境介于硬件和用户之间,基于硬件资源为用户提供服务。具体而言,计算机系统可以粗分硬件系统、操作系统、软件系统。部分学者认为用户也应该属于计算机系统的一部分:用户在使用计算机时通过各种应用程序对计算机提出应...
Linux内核分析之五——分析系统调用(system_call)的执行机制
作者:姚开健 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 当系统进行系统调用时,系统会通过int 0x80进行跳转到system_call这个地方,它是在系统初始化时,调用trap_init()就开始初始化好的地址,如果在以后有发生系统调用,则会跳转至system_ca
system call——系统调用
博客地址转至https://xisynotz.xyz 1. 系统调用 系统调用是操作系统提供的有效服务界面,一般使用高级语言编写,如c和c++,对于特定的较为底层的任务,则使用汇编语言指令。 2. API和系统调用 API,应用程序接口,提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力。 使用API而不直接调用系统调用的原因主要由以下两点:1)由于API隐藏了绝大多数...
从 system_call走进linux系统调用
慕课18原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 、课程实验:添加系统调用到MenuOS,并用GDB跟踪调试。 一、将系统调用uname 添加到MenuOS 1、在test.c中添加使用了系统调用uname 的函数的C语言版本和 汇编版本(具体内容) 操作很简单
慢速系统调用(slow system calls)和快速系统调用(fast system calls)之间的区别
 慢速系统调用(slow system calls)和快速系统调用(fast system calls)之间的区别概述         慢速系统调用(slow systemcalls)和快速系统调用(fast system calls)相关的名词在系统I/O资料里经常出现。因此了解这些名词的定义对理解系统I/O的架构非常有帮助。系统调用实际上有三种情况快速系统调用    一些系统调用立即返回。 “...
《Linux操作系统分析》之分析系统调用system_call的处理过程
本篇文章通过将上篇文章中使用库函数API和C代码中嵌入汇编代码两种方式设计的系统调用添加到系统menu中,来说明在Linux系统中,系统调用的实现的时机以及具体运行,以及一般的中断处理过程。
系统调用入口函数源码分析system_call——X86_64
在实验中用到这一块,就去看源码分析整理了一下,全部为个人理解。有错误的地方,希望和大牛交流。 首先解释一下,我实验的目的是获得系统调用入口函数system_entry的起始地址和函数大小。 在linux-3.10.1, x86 64位的系统下,系统调用的入口地址保存在MSR寄存器中,通过rdmsrl(MSR_LSTAR,ksystem_call);便可获得系统调用的入口地址,然后对该入口地址进
linux system call
系统调用 system call linux system call linux system api
系统调用,上下文切换及中断概念的汇总
       仔细揣摩了一段时间.        系统调用过程,用户进程进入内核态,进程栈进入内核态栈, cpu进入内核态,cpu用户态各寄存器的值保存到内核态栈,执行内核态代码. 执行完从内核态返回到用户态,包括进程栈返回到用户态栈,cpu返回到用户态,cpu各寄存器的值用之前保存在内核态栈的值还原.  内核在执行系统调用时处于进程上下文中,current指针指向当前进程,即引发系统调用的进程...
OS-中断,异常和系统调用
系统调用(system call)应用程序主动向操作系统发出的服务请求 异常 非法指令或者其他原因导致当前指令执行失败 如内存出错后的处理请求 中断 来自硬件设备的处理请求 如下图所示,包括中断,异常,和正常的通过函数库调用内核的操作接口。三者不同 源头不同: 中断:外设 异常:应用程序意想不到的行为 系统调用:应用程序请求操作提供服务 响应方式: 中断:异步 异常:
析构函数与运行错误
今天在做数据结构的实验课作业时,突然一直运行错误,可我检查了几次代码,也没有发现哪里有错(也并没有经常导致运行错误的,数组越界那些),经过20min左右的试探和摸索,终于发现了这次运行错误的时间,并且,还和析构函数有些关系    (而且,最尴尬的是,在我发现以后,我才想起来,这个错误在我学C++的时候就犯过了,当时我还在自己的代码上注释过这个错误,强调以后要注意)…   然而到学数据结构时
C语言实现unix系统调用system
system系统函数的功能是在c语言调用运行bash脚本的,只要是在bash可以运行的脚本,放在system函数中都可以运行. 其中命令行下的脚本是运行在当前bash环境下的.而对于脚本(.sh文件)或者system调用,是需要重新启动一个进程bash.我电脑ubuntu14.04默认启动的是/bin/sh,链接到的是dash,这个轻量级的bash.到底是bash还是dash,可以通过下面的命令
系统调用与API有什么关系?区别?
从封装层次来比较
system系统调用的使用
system() 系统调用在应用中很广泛;可以直接在C代码中调用命令,执行一些特殊操作,用法如下. 1.  直接执行命令:         可以在c文件中直接执行命令,这是基本用法,例如:             system("mkdir test"); system("chmod 777 test.bin");        等等。 2.  如果需要执行的命
系统内核参数有问题导致postgresql数据库无法启动
Inter-Process Communication --进程间通信 进程间通信主要包括管道, 系统IPC(包括消息队列,信号,共享内存), 套接字(SOCKET). PostgreSQL要求操作系统提供进程间通信(IPC)功能,特别是共享内存和信号量。 贝尔实验室基于内核对进程之间的通信手段进行了改进,形成了“System V IPC“。 POSIX则是IEEE制定的标准,目的是
系统调用和进程切换时的寄存器信息保存在哪里?
系统调用是什么??? 系统调用是操作系统为用户提供的一系列API;系统调用将用户的请求发给内核,内核执行完以后,将结果返回给用户; 以open为例,进行系统调用: 分析Linux2.6.11版本 <1>通过在unistd.h中的函数名的拼接; <2>找到对应的系统调用号 <3>然后将此系统调用号通过eax寄存器告知内核,在执行0x80号中断的时候,eax寄存器中放的是5; <4>将
简单分析system_call中断处理过程
##################################### 作者:张卓 原创作品转载请注明出处:《Linux操作系统分析》MOOC课程 http://www.xuetangx.com/courses/course-v1:ustcX+USTC001+_/about ##################################### 上一篇博客我们简单分析了系统调用
简单分析操作系统的中断机制与进程上下文切换
##################################### 作者:张卓 原创作品转载请注明出处:《Linux操作系统分析》MOOC课程 http://www.xuetangx.com/courses/course-v1:ustcX+USTC001+_/about ##################################### 1. 前言 上一篇我们详细地分析一
如何获取system()系统调用的子命令返回值
系统库函数system()通常用来调用一个外部命令;这是一个同步调用,函数会一直等待外部命令执行结束才返回,调用者然后检查结果是否正确;比如: if (system(...) == 0) or if (system(...) != -1) 是两种常见的检查运行结果是否正确的做法。 但是要想得到子命令的返回值信息,需要一些额外的处理代码。 下面是man sy...
[转]HUSTOJ出现RuntimeError,正确姿势。
有时候碰到运行错误会弹出类似“Runtime Error:[ERROR] A Not allowed system call: runid:6376 callid:20 TO FIX THIS , ask admin to add the CALLID into corresponding LANG_XXV[] located at okcalls32/64.h ,and recompile jud
Linux系统调用
1 概述相比Intel支持的快速系统调用指令sysenter/sysexit,AMD对应的是syscall/sysret,不过现在,Intel也兼容这两条指令。 测试环境:Ubuntu 12.04Ubuntu 16.04 642 传统系统调用int 0x80只用于32位系统,64位系统上不起作用; 系统调用号和返回结果EAX指定要调用的函数(系统调用号)EBX传递函数的第一个参数ECX传递函数的第...
进程上下文切换与和线程上下文切换有什么不同?
1.首先,需要搞明白什么是上下文切换?(面试题) 上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。 2. 然后,需要明白进程与线程的区别?(网上很多,这里简单说明) 1).线程是进程的一部分。进程是表示资源分配的基本单位,又是调度运行的基本单位,是程序执行的一个实例; 线程是进程中执行运算的最小单位,即执行...
记录一次系统调用慢的 分析过程
收到问题jira描述 •    •      [EM] 0131559] [工厂适应性问题] 执行shell命令,系统反应慢 •       分析发现调用系统system函数执行命令的时间过长,每条命令执行约250ms。对比其它平台只需要
针对Linux x86_64内核,如何自己写系统调用
针对Linux x86_64内核,如何自己写系统调用 针对Linux x86_64内核,如何自己写系统调用 写一个helloworld系统调用 1. 依赖安装 2. 下载一个内核版本 3. 写helloworld系统调用 4. 写C语言程序查看成功插入helloworld系统调用模块 如何判断是否真正以模块化方式插入系统调用 写一个helloworld系统调用 写...
linux 内核分析-第四周
预备知识内核态 用户态 为什么要划分系统级别? 如何区分内核和用户态? cs:eip什么是 system-call先看 linux 系统支持系统调用表0 common read sys_read 1 common write sys_write 2 common open sys_open 3 common
Linux asm系统调用:32位和64位的区别
最近在学习系统调用,一段用asm内联汇编写的简单程序始终得不出正确的系统调用结果。经过提醒,我才了解到这是32位平台和64位平台的系统调用方法不同的原因。在此列出相关的程序和我的理解。
关于fork进程创建和进程上下文切换时现场保存的个人理解
本文针对以下三个容易混淆和出错的问题:(1)Unix系统中用fork()创建新进程时,要复制父进程内存,父进程的页表是不能完全复制的吧?(2)进程切换过程中的上下文信息保存与恢复,必须在内核态吗?(3)信号量和管程机制是否可以相互实现,有没有确定的答案和证明?首先理解以下概念:一、进程控制块进程控制块:PCB是操作系统管理控制进程运行所有的信息集合,主要包括进程描述信息、进程控制和管理信息、资源分...
使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?
《C专家编程》中提到,库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库的数调用还要慢很多,因为它需要把上下文环境切换到内核模式然后再切换回来。 库函数对文件的操作实际上是通过系统调用来实现的。例如 C库函数 fwrite() 就是通过 write() 系统调用来实现的。但是使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?这是因为,读写文件通常是大量的数据
Linux系统调用指南
Linux系统调用最佳指南 Apr 5, 2016 • packagecloud Tags: linux kernel syscall TL;DR What is a system call? Prerequisite information Hardware and software User programs, the kernel, and CPU privilege levels
什么是系统调用?为什么要用系统调用?
什么是系统调用? Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。 随Linux核心还提供了一些C语言函数库,这些库对系统调用进行了一些包装和扩展,因为这些库函数...
系统调用和POSIX标准(重点)
系统调用 用户空间无法直接调用内核空间的进程来获取内核提供的服务,需要通过内核空间提供的接口(一些函数)来实现;这些函数即为系统调用 由操作系统实现的所有系统调用所构成的集合即程序接口或应用编程接口,是应用程序同系统之间的接口。 其他可以调用系统调用的somethings:1.Shell   2.c函数库   Linux进程的运行状态 1.内核态:系统调用进程运行在内核空间...
linux系统调用原理及实现
linux系统调用 系统调用是linux内核为用户态程序提供的主要功能接口。通过系统调用,用户态进程能够临时切换到内核态,使用内核态才能访问的硬件和资源完成特定功能。系统调用由linux内核和内核模块实现,内核在处理系统调用时还会检查系统调用请求和参数是否正确,保证对特权资源和硬件访问的正确性。通过这种方式,linux在提供内核和硬件资源访问接口的同时,保证了内核和硬件资源的使用正确性和安全性。...
中断上下文和进程上下文
上下文指的就是 在调度的切换过程就叫 上下文。(这个过程需要保存当前 的一些参数) 内核调度的切换就叫中断上下文,他的目的就是获得cpu的调度全,在这里没有进程的概念 整个内核就一个init 进程(多cpu除外) 进程上下文 就是指用户进程之间的切换 过程中保存的一些 当前进程的运行参数。 下面有个问题:     1. 问什么中断上下文中不能有sleep      首先中断实在内核态下的...
用asm内联汇编实现系统调用
原创内容(cxsmarkchan 陈晓爽) 转载请注明出处 《Linux内核分析》MOOC课程学习笔记 为保证系统的稳定运行,CPU运行状态被分为内核态和用户态。操作系统在内核态下运行,因此拥有所有计算机资源的操作权限。而一般的应用程序则在用户态下运行,它们不能直接操作底层的硬件设备,从而保证应用软件不会破坏系统的稳定。但是,应用程序在运行时常常需要和各种资源打交道,为此,操作系统提供了“系统
使用嵌入汇编调用open系统调用
邵帅 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我使用的系统api是open函数,这个函数一共有open系统调用一共有三个输入参数,第一个参数pathname是字符串,表示需要打开的文件的完整路径,如果只给出了文件名,则系统调用会从当前运行程序所在的目录内查找该文件。第二个参数flags用于指出文件的访问模
使用Java调用Linux系统命令
有时候,我们在使用Java做一些操作时,可能性能上并不能达到我们满意的效果,就拿最近工作中的遇到的一个场景来说,需要对大量的小文件进行合并成一个大文件。 最开始的想法是使用Java做文件操作,遍历所有小文件然后往一个文件写(可以做成并发写),但是发现操作过程中遇到个问题,写一千多个小文件在本机Windows下需要花费几十秒的时间,即使在Linux环境下高配置的机器也需要将近十秒,这明显对接口的响...
Linux网络编程--主要系统调用函数
一、字节顺序和转换函数1、大小端不同机器内部对变量的字节存储顺序不同,有的采用大端模式,有的采用小端模式 大端模式:高字节数据存放在低字节处,低字节数据存放在高字节处 小端模式:低字节数据存放在低字节处,高字节数据存放在高字节处2、网络字节顺序在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,因此TCP/IP协议规定了在网络上必须采用网络字节顺序(也就
SOCKET用户接口与系统调用关系
所有的socket系统调用的总入口是sys_socketcall(),在include/linux/Syscalls.h中定义 其中,@param call 标识接口编号,@param args 是接口参数指针 接口编号的定义在 include/uapi/linux/net.h中定义 接口编号对应的参数个数在net/socket.c文件中的nargs数组中