为了账号安全,请及时绑定邮箱和手机立即绑定

银都娱乐体育,澳门皇虎

/ 猿问

系统调用和C语言库函数

一只甜甜圈 2018-11-26 15:13:59

本文地址:http://www.bgel.cn/wenda/detail/459540
文章摘要:银都娱乐体育,澳门皇虎,永盈会娱乐场,扎金花棋牌游戏官网

最近学习操作系统,有些东西不是很明白。c语言的库函数有些是利用系统调用实现的,有些不是.我就想问下不是利用系统调用的那部分,在执行时硬件是怎么知道的呢?最后语言代码被编译成二进制,执行时仍然是由寄存器硬件什么执行的吧,既然没利用系统调用,alu这些东西是怎么懂这些库函数要求的操作是干嘛的啊?不是说系统调用是软硬件的接口吗?还有系统调用和驱动程序的关系是什么?


查看完整描述

2 回答

?
慕少1208348

调用系统调用,代码跳入内核态,可以执行任何指令,包括 受保护的指令
在用户态,很多指令是受保护的,不能直接执行,或者执行会出错。
例如 286 以上的X86 系列及兼容CPU
IO指令,就是受保护的。
实际上,硬件之间是通过总线相连的,并通过,IO读写指令,内存读写指令,DMA 方式,等等相互通讯。
程序代码,被CPU取到,然后逐一执行
你写的代码,加载到内存后,操作系统用一个跳转指令(call,jump,ret,iret 等等,都属于跳转类指令)
转到你的代码中执行的

除非受到保护的指令,都是可以在用户态执行的,例如加法指令
数学库
math.h,的函数
string.h
就大部分代码都属于,非保护指令

而 IO库中的许多函数
例如
stdio.h
io.h 
中的很多函数,都会调用系统调用的


查看完整回答
反对 回复 2018-11-30
?
料青山看我应如是

说说我的理解,C语言里的库函数在编译后都是生成的二进制指令,就包含了对硬件的操作。
举一个例子,“+”是对两个数进行操作,这两个数既可能是数字,也可能是变量。如果是数字,在汇编语言中对于的就是立即数,编译成二进制指令时直接利用无符号数加法指令就可以;而如果是变量的话,就会编译成多条指令,首先是从内存里读取变量到寄存器,再在寄存器中进行加法运算,运算完再保存到内存中。


查看完整回答
反对 回复 2018-11-30

添加回答

回复

举报

0/150
提交
取消
意见反馈 去赚学费 常见问题 扎金花棋牌游戏官网 官方微信
网站地图 金沙网站 扑克王app官网 现金投注平台 橙天嘉禾官网
大奖娱乐城 合乐888 盈丰国际登录 澳门开奖结果
彩票网站大全 皇冠比分皇冠资讯 澳门皇冠 亚博无法取钱
龙8娱乐城app下载 橙天嘉禾娱乐 足球大赢家电子版 优博国际
永利皇宫网站 天天娱乐官网下载 天天娱乐检测 亚虎娱乐网页版登录
爱赢娱乐 华人娱乐关注平台 凤凰彩票网站 星辉彩票 六合彩天空彩票与你同行
华人娱乐关注平台 众购彩票网现金 555彩票网 信彩彩票 如意娱乐
万博娱乐代理 天游娱乐计划 凤凰娱乐登录网址 大神娱乐 银豹娱乐
大神娱乐官方网站 世纪彩票网 易购娱乐平台网址 香港天下彩 众购彩票网