当前位置:  技术问答>linux和unix

我是个新手,请各位大虾多多帮忙,能帮多少帮多少!

    来源: 互联网  发布时间:2014-11-27

    本文导语:  用户与内核间如何通信?为什么不能直接通信?如何查看内核中各进程状态?进程中有多少种状态,每种状态的意义。 还有,如何实现任务切换,如何处理中断?如何编写自己的中断? | 用...

用户与内核间如何通信?为什么不能直接通信?如何查看内核中各进程状态?进程中有多少种状态,每种状态的意义。
还有,如何实现任务切换,如何处理中断?如何编写自己的中断?

|
用户和内核通信?用户只和shell交互。直接控制内核太麻烦了。而且很可能会出错。
ps aux,top查看进程状态。

进程切换是使用switch_to这个宏来做的,当进入时prev即是现在运行的进程,next是接下来要切换到的进程,
#define switch_to(prev,next,last) do {  
asm volatile( 
"pushl %%esint"  
"pushl %%edint"  
"pushl %%ebpnt"  


// 首先它切换堆栈指针,prev->tss.esp = %esp;%esp = next->tss.esp,这以后的堆栈已经是next的堆栈了。 
"movl %%esp,%0nt" /* save ESP */  
"movl %3,%%espnt" /* restore ESP */  


// 然后使进程prev的指针保存为标号为1的那一个指针,这样下次进程prev可以运行时,它第一个执行的就是pop指令。 
"movl $1f,%1nt" /* save EIP */  

// 把进程next保存的指针推进堆栈中,这句作用是,从__switch_to返回时,下一个要执行的指令将会是这个指针所指向的指令了。 
"pushl %4nt" /* restore EIP */  

// 使用jump跳到__switch_to函数的结果是:调用switch_to函数但不象call那样要压栈,但是ret返回时,仍是要弹出堆栈的,也就是上条指令中推进去的指令指针。这样,堆栈和指令都换了,进程也就被"切换"了。 
"jmp __switch_ton"  

// 由于上面所说的原因,__switch_to返回后并不会执行下面的语句,要执行到这,只有等进程prev重新被调度了。 
"1:t"  
"popl %%ebpnt"  
"popl %%edint"  
"popl %%esint"  
:"=m" (prev->tss.esp),"=m" (prev->tss.eip),  
"=b" (last)  
:"m" (next->tss.esp),"m" (next->tss.eip),  
"a" (prev), "d" (next),  
"b" (prev));  
} while (0) 


处理中断比如软盘驱动控制器用的中断口是中断控制器的管脚6,那么当中断处理字系统接收到一个中断信号6时,系统必须将CPU执行地址转到软盘设备驱动程序代码处。Linux使用一系列指针指向含有中断处理例程的数据结构。这些例程分别属于系统中不同的设备驱动程序。每一个设备驱动程序在初始化时负责申请它所需要的中断号。
当一个中断发生时,Linux首先必须通过读取当前的ISR(中断状态寄存器)来决定中断的来源。然后核心把这个中断源映射到irq_action向量一个偏移量上。例如,一个来自软驱的中断6将被映射到向量的第7个入口。如果对于一个发生了的中断没有一个中断处理句柄相对应,Linux核心将记载一个错误。否则,核心将通过查询所有的”挂“这个中断口上irqaction结构并调用相应的中断处理例程。





|
看看《unix操作系统设计》机工版吧,看了就会茅塞顿开的。

    
 
 

您可能感兴趣的文章:

  • 超级新手菜鸟请问各位大虾!
  • 新手求救,大虾帮帮忙。。。。。。。。。
  • 我是新手~~~各位大虾~~在哪儿下AIP文档啊???
  • 新手上路 请大虾相助
  • 新手问题,请大虾们帮忙
  • 新手:各位大虾用什么工具编java?有人说vj++不好。
  • 我是新手,各位大虾,请问学习JAVA有没有什么好用的书!!谢谢。有分挣哦!
  • 大虾,老鸟们,新手请教,都有什么是“由于历史的原因”造成的
  • linux新手,有几个简单的问题问各位大虾!
  • 新手初到跪求大虾linux系统自动生成同名的文件与后缀~文件解决办法
  • 大虾救命~~~新手装不上LINUX
  • jsp 连数据库连不上?新手请各位大虾帮忙!
  • 很急!!我连Linux新手都算不上,但近期却必须用,向各位大虾请教win98和Linux双启动的问题。若能解决,进者有分。
  • IIC错误----新手,麻烦大虾提点,谢谢
  • 新手求教:关于ftp命令的问题,请大家帮帮忙
  • 新手想学JAVA,帮忙!
  • 新手求救,关于内核makefile,请帮忙!
  • 新手上路,大家帮帮忙
  • 新手请教啦~~能不能帮忙推荐几本书
  • 哈哈,新手上路,大家帮忙解释一下.
  • 新手的问题,请高手帮忙
  • 新手上咱,请各位大哥帮忙:)
  • 新手啊,大家帮忙
  • java新手的问题,java高手帮忙...
  • 请问在那里可以下载java帮助??新手上路,请帮帮忙!
  • 关于防火墙的一个新手的问题 请帮忙
  • linux新手一个很简单的问题,请高手帮忙
  • 请大家帮帮忙吧!我是新手请教个问题
  • 新手上路,请帮忙
  • 刚装了redhat Linux9,进入csdn发现左边的目录是乱码,我是新手请大家帮帮忙,谢谢!
  • 新手的BASH代码错误,求帮忙解决
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 新手如何加入开源项目 有什么好的c++,java 开源适合新手 请指点!
  • JDBC的问题,新手高手都来看看吧,说不定能帮帮我这个新手呢,谢谢!
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 新手关于驱动开发的疑问
  • 新手有关linux的问题!
  • 新手急求~~~~~~~~~~~~~~~~~~~
  • 新手学习该用哪个版本
  • 面向新手的终端辅助工具 Clicompanion
  • 我是个新手,请各位老兄给介绍基本好书?
  • 我是新手
  • 新手:用WEB页面修改数据库中的表?
  • Java新手上路之问题
  • 我是一名新手,请问如何学java
  • (新手)这里怎么看到300篇以外的所有文章?(不是搜索)
  • 新手求助!
  • 新手上路,怎样判断网卡是否安装成功?
  • !!新手求救!!
  • 新手在此多谢了:SUN的宠物商店
  • 新手请教,我用VI时按ESC键,总是回嘟嘟嘟嘟响,请问如何去掉!谢谢!
  • 新手求救!!关于变量初始化


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3