精华内容
下载资源
问答
  • 很多情况下,软中断和信号有些类似,同时,软中断和硬中断相对应的,硬中断是外部设备对CPU的中断,软中断通常中断服务程序对内核的中断,信号则由内核(或其他进程)对某个进程中断(《Linux内核源代码...
    软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和信号有些类似,同时,软中断又是和硬中断相对应的,硬中断是外部设备对CPU的中断,软中断通常是硬中断服务程序对内核的中断,信号则是由内核(或其他进程)对某个进程的中断(《Linux内核源代码情景分析》第三章)。软中断是linux系统原“底半处理”的升级,在原有的基础上发展的新的处理方式,以适应多cpu 、多线程的软中断处理。
    软中断是实现系统API函数调用的手段
    函数调用时将返回地址和CPU状态寄存器内容压栈,函数执行完毕后出栈返回断点继续执行。
    软中断调用时将返回地址和CPU状态寄存器内容压栈,修改特权级,根据中断号查找中断向量表,找到ISR中断服务例程地址,跳转执行。

    转载于:https://www.cnblogs.com/Ph-one/p/8491187.html

    展开全文
  • 这里有个矛盾,假设缓冲块上锁的原因正在进行磁盘读写,那么解锁必然发生在磁盘中断的中断处理程序中,但是这个时候中断被关闭了,磁盘中断不能被处理,那么这个缓冲块不是永远得不到解锁了吗? 想了好久没想通,...
  • 在ssh上启动了一个长期运行的进程,但是不得不离开并且不想中断它吗? 只需启动一个屏幕,使用reptyr抓取它,然后终止ssh会话并返回首页即可。 用法 reptyr PID “ reptyr PID”将获取ID为PID的进程并将其附加到...
  • SIGTERM不带参数时kill发送的信号,意思进程终止运行,但执行与否还得看进程是否支持。但是SIGKILL信号不同,它可以被捕获和解释(或忽略)的过程。SIGKILL发送到处理的信号以使其立即终止。当发送到程序,...

    SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。但是SIGKILL信号不同,它可以被捕获和解释(或忽略)的过程。

    SIGKILL是发送到处理的信号以使其立即终止。当发送到程序,SIGKILL使其立即终止。在对比SIGTERM和SIGINT,这个信号不能被捕获或忽略,并且在接收过程中不能执行任何清理在接收到该信号。

    SIGINT中断信号,终端在用户按下CTRL+C发送到前台进程。默认行为是终止进程,但它可以捕获或忽略。

    SIGQUIT是其控制终端发送到进程,当用户请求的过程中执行核心转储的信号。 SIGQUIT通常可以ctrl+\。它可以被捕获和解释(或忽略)。

    下面一个例子

    可看到Linux支持的信号列表:

    ~$ kill -l

    1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL

    5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

    9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2

    13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD

    18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN

    22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

    26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO

    30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1

    36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5

    40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9

    44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

    48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13

    52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9

    56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5

    60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1

    64) SIGRTMAX

    列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

    展开全文
  • (11)可以在一个程序中同时使用malloc()和brk()吗?这样做会有什么后果?(12)当一个不可抢占的内核运行在内核态时,如何处理定时器中断...(15)为什么Linux内核的中断处理函数不可睡眠?所有的OS内核都这样的吗?

    (11)可以在一个程序中同时使用malloc()和brk()吗?这样做会有什么后果?

    不安全,别这样做。因为malloc()内部可能会用到brk()或者sbrk(),混合调用会导致malloc()混乱。即便看上去是非常安全的改动,比如通过sbrk()改变数据段的大小,也不是100%安全的。

    不要同时使用malloc()和brk()。


    (12)当一个不可抢占的内核运行在内核态时,如何处理定时器中断?内核是会忽略这个中断还是在定时器中断完成后重新进入原先的进程?

    只要你不是在一个所有中断都被禁用的临界区,当定时器中断到来时,定时器中断处理函数都会执行,不管当前系统是处于内核态还是用户态。

    当中断返回后,内核把控制权交还给被打断的线程,这个线程可能是内核本身或者是某些进程。

    不管内核是不是可以被抢占的,都不会改变上述过程。内核的可抢占性仅仅保证一个用户进程可以打断另一个用户进程,即便被打断的用户进程(通过系统调用)进入了内核态。


    (13)Linux内核有防止mlock()的滥用吗?如果有,是怎么做到的呢?

    如果允许不加节制的使用mlock(),用户可能会锁住非常多的物理内存,从而导致本地机器资源耗尽,拒绝服务。因此,Linux内核限制了非特权进程可以锁住的内存大小。这个限度叫RLIMIT_MEMLOCK,可以通过setrlimit()来设定。

    在目前的Linux内核中,这个值默认为64K:

    $ulimit -l

    64

    具有CAP_IPC_LOCK权限的的用户(比如说root)可以锁住不限数量的内存。这个特性是在2.6内核中新加入的,之前的内核要求具有CAP_IPC_LOCK权限,才能锁住RLIMIT_MEMLOCK大小的内存。2.6内核的改变允许非特权进程可以锁住一小块内存,比如64K大小,足够把一些敏感信息锁在内存当中。mlock()可以阻止内存被交换到磁盘的swap分区,否则攻击者在程序结束后可能从交换分区中恢复这些数据。


    (14)用户态访问原始块设备的最佳途径是什么?

    “最佳”途径是别从用户态直接访问,而是通过直接(direct)I/O。直接I/O可以像普通I/O一样访问常规文件,但是它绕过了VM和所有缓存,给了你直接访问文件系统的能力。连原始I/O的主要用户Oracle都开始转向使用直接I/O了。要想使用直接I/O,只需要在打开文件时指定O_DIRECT标志就可以了。当然,更好的访问方法还是使用普通I/O,毕竟内核给普通I/O提供了很多辅助,你大部分情况下没必要放弃这些。

    如果你坚持使用原始I/O,那么你需要使用raw命令和/dev/raw:

    raw /dev/raw/raw1 /dev/hdc

    上述命令将块设备/dev/hdc映射到原始设备/dev/raw/raw1。这样就可以像访问其他文件一样访问这个原始设备,对硬盘进行直接的I/O操作。


    (15)为什么Linux内核的中断处理函数不可睡眠?所有的OS内核都是这样的吗?

    Linux中的中断处理函数不可睡眠是因为他们不支持线程化的执行,换句话说,它们是不可以被调度的实体。(现在Linux有了线程化的中断处理函数了,不过这是另外一回事了。)

    大多数但不是所有操作系统都是这样。大部分操作系统将中断处理分为两块,一般称为上半部和下半部。上半部执行的非常快。当中断发生的时候,上半部会打断当前执行的一切程序去执行自己,但是上半部自身是没有线程的。结果就是上半部是不可睡眠的,因为在睡眠结束后没办法再把它调度回来。



    展开全文
  • CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    该位置是进程映射的内存边界。 brk() 只是简单地将这个位置向前或者向后移动,就可以向进程添加内存或者从进程取走内存。 mmap: mmap(),或者说是“内存映像”,类似于 brk(),但是更为灵活。首先,它可以映射任何...
  • 该位置是进程映射的内存边界。brk() 只是简单地将这个位置向前或者向后移动,就可以向进程添加内存或者从进程取走内存。 mmap:mmap(),或者说是“内存映像”,类似于 brk(),但是更为灵活。首先,它可以映射...
  • 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。 5.20运行时的“nullpointerassignment”错误什么意思?应该怎样捕捉它? 第6章 数组和指针 ...
  • 除对操作系统常识性的了解(比如知道中断进程等概念)之外,本书不假定读者具备其他任何经验。 如果你学习过操作系统的理论课程,你会发现本书对于理论的吻合和补充。它从实践的角度为你展现一幅操作系统画面...
  • 除对操作系统常识性的了解(比如知道中断进程等概念)之外,本书不假定读者具备其他任何经验。 如果你学习过操作系统的理论课程,你会发现本书对于理论的吻合和补充。它从实践的角度为你展现一幅操作系统画面...
  • 编程高手箴言(推荐)

    2014-12-23 11:39:34
    2.2.4 中断处理 27 2.3 32位微处理器 29 2.3.1 寄存器组成 29 2.3.2 保护模式 32 2.3.3 80386的寻址方式 32 2.4 【实例】:在DOS实模式下读取4GB内存代码分析 36 2.4.1 程序的意义 37 2.4.2 程序代码 37 2.4.3 程序...
  •  0210 无法设置信号处理程序。  0212 区域已锁定,无法重新分配。  0214 附加到此程序或动态链接模块的动态链接模块太多。  0215 无法嵌套调用 LoadModule。  0216 图像文件 %1 有效,但不适用于本机...
  • 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。 62  5.20 运行时的“null pointer assignment”错误什么意思?应该怎样捕捉它? 62 第6章...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    2.19 程序运行正确,但退出时却“core dump ”(核心转储)了,怎么回事? 29 联合 30 2.20 结构和联合有什么区别? 30 2.21 有办法初始化联合吗? 30 2.22 有没有一种自动方法来跟踪联合的哪个域在使用? ...
  • o 3.5 在 C 中是否有模拟继承等面向对象程序设计特性的好方法? o 3.6 我遇到这样声明结构的代码: struct name { int namelen; char namestr[1];}; 然后又使用一些内存分配技巧使 namestr 数组用起来好像有多个...
  • Reversing:逆向工程揭密

    热门讨论 2010-06-21 17:00:47
    这时候,我逐渐明白这一种威力强大的技术,因为这意味着不管我有什么样的有关要处理软件的问题,我都可以非常容易地找到答案,即使我没有看过任何相关的文献资料或者正在处理程序的源代码。本书就是要为每一个对...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.5 在C 中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7 i 目录ii 2.6 我遇到这样声明结构的代码: struct name f int namelen; char namestr[1];g; 然后又使用一些内存分配技巧使namestr 数组用起 来...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
     visual studio微软公司推出的、目前最流行的windows平台应用程序开发环境。本书介绍了各种visual studio使用技巧,全书共7章,依次介绍了编辑器、查找功能、环境布局、设计 工具以及解决方案、其他项目与调试...
  • 比如,跳转页面需要登陆状态如何拦截,跳转页面传递参数该怎么办,程序意外跳转异常或者失败又该如何处理? 使用Arouter注意事项有哪些?如何让代码变得更加容易让人维护? 直接看我这篇博客:...
  • 当设定为[Enabled](启动)时,这个项目在系统电源开启之后,可加速POST(Power On Self Test)的程序。BIOS会在POST过程当中缩短或是跳过一些检查项目,从而加速启动等待的时间! Hard Disk Boot Priority(硬盘...
  • LINGO软件的学习

    2009-08-08 22:36:50
    LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么集 集一群相联系的对象,...
  • PotPlayer v1.5 绿色版

    2010-08-14 16:47:50
     + 添加语音滤镜处理过程中可即时重置功能  + 添加播放蓝光播放列表(mpls)功能  + 添加上/下一个书签功能  - 更新内置解码器  - 修正某些字幕无法加载问题  - 修正无法加载第2个光驱中的字幕问题  - 更新 VMR...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
热门标签
关键字:

中断处理程序是进程吗