鱼C论坛

 找回密码
 立即注册
查看: 2775|回复: 1

[技术交流] 我学习操作系统原理手记07

[复制链接]
发表于 2012-3-28 00:50:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天迷迷糊糊睡了1天,晚上起来看了下论坛,找了下资料,继续写下自己的手记

**********************************************************
an expert is a man who has stopped thinking -he know!
Frank lioyd wright

**********************************************************


        
进程A运行中
中断发生
进程状态被保存被挂起
进程调度
进程B启动


由于我们的CPU只有1个,而且我们无论在调度任何操作的时候都会考虑到我们仅仅是调度,最后都要还原
比如我们的ESP定律,我们操作开始会开始入栈内存寄存器,最后返回结束程序的时候我们会把最初的内存寄存器都返回

关于进程汇编语言的保存是popad与pushad

这样在中断发生的时候,我们保存了我们的进程就是为了进程A的任何操作不会影响进程B的任何操作,最后进程的操作是不会影响内存的初始值

关于内核栈,昨天在百度的时候看到篇好贴http://oss.org.cn/kernel-book/ch03/3.3.1.htm

在此,要多说明的是
进程栈-----进程运行时候自己的推展
进程表-----存储进程状态信息的数据结构体
内核栈-----进程调度模块运行时候使用的推栈

当进程运行,ESP指向了推栈,中断开始发生的时候, 从ring1到了ring0 ,ESP的值变成了TTS中预备好的ring0下的ESP值
在此,通过ESP从进程栈转向了内核栈后,进程切换推栈的问题就解决了。


上面的简单过程中,唯一需要担忧的是, 我们在进程切换的时候,发生了从ring1,到ring0的过程,等于进程切换的中断,会告诉CPU,这个事情很紧急,需要你急事处理, 那么CPU会适当考虑后给出了答复,把权限提高,然后由于级别的上升,那么我们的TTS中的SS和ESP。然后取代为目标的SS和ESP。 不仅如此,牵一发动全身,由于调用门的发生,进行了权限校验,然后交出了权限, 这个时候我们知道TTS发生了变化,但是到了描述符GDT和局部描述符LDT表肯定又要发生了变化。

最后进程切换完毕,但是我们是肯定要切换回去的,首先我们又要考虑到权限级别的转换从ring0带ring1
那么我们是怎么知道什么时候可以转换过去到进程呢?可以通过上面怎么转换过来的转过去,而且在当时Eip也指向好了之前进程的代码和内存。

但是在上面还有个东西是发生了改变的。我们的GDT和LDT描述符,是在转换的时候发生了变化的
所以还要在这里设置1个时间中断处理程序来方便我们从ring0到ring1.

说起来我靠我的理解也是很难去阐述解释这么1 个过程,那么我总结下我借鉴的书,来把这个过程,在大概化下

1。进程表和GDT。进程表内的LDT Selector对应GDT中的1个描述符, 而这个描述符所指向的内存空间就存在与进程表中。

2。进程表和进程。进程表是进程的描述, 进程运行过程中如果被中断, 哥哥寄存器的值都会被保存进入到进程表中。
但是, 在我们的第一个进程开始之前, 我们并不需要初始化太多内容, 只需要知道进程的入口地址就足够了, 另外, 由于程序免不鸟要用到推栈, 而推栈并不是受到程序本身控制的, 所以还要事先指定esp>

3。GDT和TSS,GDT中需要有1个描述符来对应TSS, 需要实现初始化这个描述符


其实我觉得进程不仅仅是1个结构体,更是像1个无限循环的函数

关于课外很多人很迷惑的地方
关于返回,我记录下我对返回的收藏
///////////////////////////////////////////////////////////////////////翻译的不是很好,但是能看懂的//////////////////////////////////
RET的,其确切的代名词RETN,弹出IP或EIP从堆栈和控制权转移到新的地址。或者,如果提供一个数字的第二个操作数,它们递增进一步imm16的字节,后弹出返回地址堆栈指针。

RETF执行至今的回报:后弹出的IP / EIP的,然后弹出政务司司长,然后递增可选参数,如果目前的堆栈指针。

从中断(硬件或软件)IRET指令弹出IP(或EIP),CS和堆栈的标志,然后继续执行新的CS方式:IP的回报。

IRETW弹出IP,CS和2个字节的标志,起飞栈共6个字节。

IRETD持久性有机污染物EIP的为4个字节,另外4个字节其中前两个被丢弃和底部的两个去到CS弹出,弹出标志以及为4个字节,以12个字节堆栈。

IRET指令是一个,要么IRETW或IRETD的简写,这取决于当时的默认设置位。

知道原因后,就可以灵活运用了

*前面推个什么地址,后面就跳到什么地址的页面执行

///////////////////////////////////////////////////////////////////////翻译的不是很好,但是能看懂的//////////////////////////////////


原文

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
RET, and its exact synonym RETN, pop IP or EIP from the stack and transfer control to the new address. Optionally, if a numeric second operand is provided, they increment the stack pointer by a further imm16 bytes after popping the return address.
RETF executes a far return: after popping IP/EIP, it then pops CS, and then increments the stack pointer by the optional argument if present.
IRET returns from an interrupt (hardware or software) by means of popping IP (or EIP), CS and the flags off the stack and then continuing execution from the new CS:IP.
IRETW pops IP, CS and the flags as 2 bytes each, taking 6 bytes off the stack in total.
IRETD pops EIP as 4 bytes, pops a further 4 bytes of which the top two are discarded and the bottom two go into CS, and pops the flags as 4 bytes as well, taking 12 bytes off the stack.
IRET is a shorthand for either IRETW or IRETD, depending on the default BITS setting at the time.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



最后返回清理现场,和我们破解看OD最后的返回差不多。~
为的就是不改变更多的寄存器,而产生更大的风险(BUG)



多进程
在上面我一直描述的都仅仅是单个进程,进程要么运行要么挂起(中断),然后继续运行....




待续....

2012/03/28
凌晨

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
小甲鱼 + 5 + 5 赞一个!鼓励探究分享精神!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-28 00:51:23 | 显示全部楼层
自己的 2楼,支持下自己,进程虽然是很多学计算机专业同学开始最先上的课程,但是确实是很难理解的课程,在Q哥的提示下,进程,我一定要多加研究

我不是计算机专业的。~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 22:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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