设为首页 收藏本站
查看: 580|回复: 0

[经验分享] [Linux内核完全剖析]第五章Linux内核体系结构5.4-5.6总结 x86中断和时间控制

[复制链接]

尚未签到

发表于 2016-3-16 12:47:44 | 显示全部楼层 |阅读模式
  x86中断子系统
x86微机系统中采用了8259A可编程中断控制器,每个8259A可以管理8个中断源,通过多片级联方式,可以构成最多管理64个中断向量的系统。PC/AT中使用了2片8259A,共可管理15个中断向量。CPU通过IO指令对8259A进行初始化后,芯片就可以根据当前设定的优先级状态通过INT引脚来通知CPU中断请求。CPU响应后,会从数据总线D7-D0获取从芯片发送的中断号。

CPU根据中断号要获取中断服务地址,就需要一张中段向量表(实模式)/中断描述符表(保护模式)来进行查询。x86微机支持256个中断:
实模式下每个中断向量占4个字节,低字放入偏移地址,高字放入段值。中断向量表共长1024字节,BIOS在启动后会在物理地址0开始初始化并设置中断向量表,中断服务程序由BIOS给出,向量是按顺序排列的。其中两片8259A支持的16个(由于IRQ2被用于级联输入,实际可使用的中断只有15个)硬中断被依次设置在中断向量0x20——0x2f中。Linux系统在刚开始加载内核时会用到显示和磁盘读的中断,然后在setup.s中重新初始化8259A并在head.s中重设一张中断描述符表。

对于Linux内核来说,中断信号分为两类:硬件中断和软件中断。
int 0——int 31,每个中断的功能根据Intel固定设定或者保留,属于软中断,intel称为异常。在kernel/traps.c中设置
int 32——int 47,对应于8259A发出的硬件中断,IRQ0——IRQ15
int 128,系统调用中断,在kernel/sched.c中设置
系统调用:eax放调用号,ebx,ecx,edx依次存放参数,故Linux0.11最多向内核传递三个参数。

系统时间,通过init/mian.c中的time_init()函数读取主板RT电路上保存的时间信息,再用过kernel/mktime.c中kernel_mktime()函数转化为Unix日历时间(从1970-01-01:00:00:00到当前位秒数)被保存在全局变量startup_time中内核使用。用户可使用time()系统调用来读取该值,超级用户可以通过stime()系统调用设置该值。系统定义了宏来获取当前时间
#define CURRENT_TIME (startup_time + jiffies/HZ)
  jiffies是系统启动到当前的时钟滴嗒,10ms为单位,HZ=100是滴嗒频率。时钟滴嗒是由Intel 8253计数器产生的,它连接到8259A的IRQ0引脚上,由于事先设置了计数器频率,每隔10ms就会产生一个上升沿方波,经过8259A处理后产生一个IRQ0中断,就运行一次timer_interrupt中断处理程序。中断处理程序会对jiffies自增以及当前进程的时间计数和时间片切换等操作。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-191405-1-1.html 上篇帖子: 【转】Linux下NFS(网络文件系统)的建立与配置方法 下篇帖子: linux中的热插拔和mdev机制(深入理解嵌入式linux文件系统的制作)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表