![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 52
Clairezz_
这个作者很懒,什么都没留下…
展开
-
为什么要区分用户态和内核态?
在CPU的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果所有的程序都能使用这些指令,那么系统死机的概率将大大增加。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权等级分为4个级别:Ring0~Ring3Linux使用Ring3原创 2015-07-01 19:55:02 · 5648 阅读 · 0 评论 -
进程切换
其过程的基本思想是:当进程A要切换出去时,先把EIP和其他寄存器的内容保存到自己的堆栈中,而这个被保存的EIP实际指向了用来恢复其他寄存器的指令的起始地址。接着将ESP的内容保存到对应的thread_struct结构体中(我的理解是此结构体相当于PCB中的一部分)以备切换回来时使用。在ESP中装入进程B的ESP内容,其他需要切换回来的状态分量都可以通过ESP切换回来,注意按照保存的顺序切换回来转载 2015-07-01 17:08:53 · 846 阅读 · 0 评论 -
静态重定位与动态重定位
程序和数据装入内存时需对目标程序中的地址进行修改。这种把逻辑地址转变为内存的物理地址的过程叫重定位。对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。1.静态重定位静态重定位是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位转载 2015-07-02 16:49:26 · 9879 阅读 · 0 评论 -
什么是进程表?
进程表,也称进程控制块(PCB),是由操作系统维护的,每个进程占用其中一个表项。该表项包含了操作系统对进程进行描述和控制的全部信息,从而保证该进程换出后再次启动时,就像从未中断过一样。在典型的系统中包含如下关键字段;1.进程管理相关包含三大类信息;1)标识信息:用于唯一地标识一个进程,包括进程ID、父进程、进程组等。2)现场信息:用于保留一个进程在运行时存放在处理器现场中的各种原创 2015-07-01 16:51:42 · 4979 阅读 · 0 评论 -
sleep()、yield()和wait()
注:以下函数都是指Java中的函数sleep()使当前线程(即调用该方法的线程)暂停执行一段时间(用户可以指定暂停多久),让其他线程有机会继续执行。要点:1.进入阻塞状态2.不释放锁。3.可以使低优先级的线程、同优先级的线程、高优先级的线程都有执行的机会。4.可以抛出 InterruptionException 异常yield()同sleep()原创 2015-07-02 21:06:16 · 275 阅读 · 0 评论 -
[MOS学习笔记] 完成系统调用read的11个步骤
注:1.C和C++编译器使用逆序,即第一个参数放在堆栈顶部2.库过程是由汇编语言写成的。因为引发系统调用的实际机制是非常依赖于机器的,一些诸如保存寄存器值和设置堆栈指针之类的操作是无法用C语言这一高级语言描述,所以这些操作通过一个短小的汇编语言例程来完成,使得C语言(或其他语言)能够通过调用该例程来使用系统调用。3.陷入内核(TRAP)和普通的过程调用有什么不同?1)执行普通的过程原创 2015-07-01 20:24:28 · 1005 阅读 · 0 评论 -
孤儿进程和僵尸进程
1.孤儿进程一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。此时,init进程将以父进程的身份对这些孤儿进程进行处理。孤儿进程没什么危害2.僵尸进程一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么原创 2015-07-02 19:25:50 · 414 阅读 · 0 评论