The Long Walk Chapter1.2

距离我上次更新博客已经过去很久了,大概有两个星期的时间?但这段时间里我也在不停的为写作一个操作系统而努力,但我也逐渐发现,为什么人们会称“独立写作操作系统”是一场意志力的战斗。

It seems has been a long time when I updated my blog, maybe two weeks ago? But in this period of time, I was just keeping working for writing a OS one day. At the same time, I gradually realize that why people claim that to write a OS individually would be a suffering for your tenacity.

在这几天里,我阅读了操作系统概念的前两章,并做了笔记,由此对一些操作系统的概念有所了解。而在最近的一周中,我主要的工作是学习Intel 64位汇编语言,我将把自己的学习笔记记录在下面:

In the past two weeks, I read "The concept of operating system’ and made notes, then I got understanding to OS basic knowledge. And in the most recent one week, my main focus was Intel 64bits assembly language. I would post my note in following:

操作系统概念(The concept of operating system):
1.1 操作系统做什么
计算机系统大概分为4个组成部分:计算机硬件、操作系统、系统程序与应用程序、用户
硬件,如CPU、内存、输入输出设备,为系统提供基本的计算资源
应用程序如字处理程序、电子制表软件、编译器等规定了用户如何使用这些资源
操作系统控制和协调各用户的应用程序对硬件的使用
操作系统可以视为资源分配器,用来解决CPU时间、内存空间、文件存储空间、I/O设备等问题

1.2.1 计算机系统组织
现代通用计算机系统由一个或多个CPU和若干设备控制器通过共同总线相连,该总线提供了共享内存的访问。每个设备控制器都负责一种特定的设备。CPU与设备控制器可以并发工作,竞争内存周期,为了确保对共享内存的有序访问,需要内存控制器来协调对内存的访问

CPU通电后,(1)计算机开始运行一个初始化程序。该初始化程序或引导程序比较简单,通常位于ROM或EEPROM中,称为计算机硬件中的固件。其将初始化系统中的所有部分,包括CPU寄存器、设备控制器、内存内容。
引导程序必须知道如何装入操作系统并开始执行系统,而为了达成这一目标,引导程序必须定位操作系统内核并把它装入内存。
(2)接着,操作系统开始执行第一个进程init,并等待事件的发生。
事件的发生通过硬件或软件的中断表示。硬件随时通过系统总线向CPU发出信号,触发中断。软件通过执行特别操作,如系统调用也能触发中断。

中断必须将控制转移给合适的中断处理程序。处理转移的简单方式是调用一个通用子程序以检查中断信息。然后这个通用子程序会调用相应的中断处理程序。但是处理中断要快,只有少量预先定义的中断,所以可以使用中断处理子程序的指针表。这样可以通过指针表简介调用中断处理程序,而不需要其他中间子程序。

1.2.2 存储结构
计算机程序必须在内存(或随机访问内存Radom access memory RAM)中以便于运行。内存是处理器可以直接访问的唯一的大容量存储区域。通过对特定内存地址执行一系列load或store指令来实现交互。指令load能将内存中的字移动到CPU寄存器中,而指令store能将寄存器的内容移到内存

程序和数据都不能永久留在内存中:

  1. 内存太小,不能储存所有需要的程序和数据
  2. 内存是易失性存储设备,当掉电后会失去所有内容
    绝大多数计算机系统都提供辅存(secondary storage)
    磁盘是最常见的辅存设备,能存储程序和数据,绝大多数程序都要保存在磁盘上,执行时才装入内存

1.2.3 I/O结构
每个设备控制器负责特定的设备,可以与多个设备相连。设备控制器维护一定量的本地缓冲存储和一组特定用途的寄存器。设备控制器负责在其所控制的外部设备与本地缓冲存储之间进行数据传递。通常,操作系统为每个设备控制器提供一个设备驱动程序,这个设备驱动程序理解设备控制器,并提供一个设备与其余操作系统的统一接口。

为了开始I/O操作,设备驱动程序在设备控制器中装载适当的寄存器。相应的,设备控制器检查这些寄存器的内容以决定采取什么具体操作。控制器开始从设备向本地缓冲区传输数据。一旦传输完成,设备控制器就会通过中断通知设备驱动程序已经完成操作。然后从设备驱动程序返回对操作系统的控制
I/O中断驱动适合移动少量数据,但对大块的数据移动,如磁盘I/O,就会带来超载问题。DMA就是来解决这个问题的
在为这种I/O设备设置好缓冲、指针、寄存器后,设备控制器就能在本地缓冲和内存之间传输一整块数据,无需CPU干预。每一块只产生一个中断,而不是每个字节产生一个中断。

单处理系统
如单片机系统,有一个主CPU执行一个通用指令集,包括来自用户进程的指令。

Intel 64bits assembly language:
中央处理器是进行所有计算和逻辑的地方,包含了数量有限的称为寄存器(register)的存储单元、一个高频时钟、一个控制单元(Control Unit)、一个算数逻辑单元(Arithmetic Logic Unit);
控制单元协调执行机器指令时各个步骤的次序;
算数逻辑单元执行加法和减法等算术运算;
内存存储单元(memory storage unit)是计算机程序运行时存放指令和数据的地方,内存存储单元接受CPU的数据请求,从随机访问存储器(RAM)取出数据送入CPU,或把数据从CPU送回存储器中;
数据总线:在CPU和内存间传送指令和数据;控制总线:使用二进制信号同步连接到系统总线上的所有设备的动作;(如果当前被执行的指令要在CPU和内存间传输数据,那地址总线上保存着指令和数据的地址);
时钟用于CPU内部操作和其他系统部件的同步。涉及CPU和系统总线的任何一个操作都由一个内部时钟同步,这个时钟以固定的频率产生脉冲。机器指令使用的最基本时间单位称为“机器周期”或“时钟周期”,也就是一个完整的时间脉冲所需要的时间(两次下降沿之间的时间间隔);

指令执行周期
单条机器指令的执行可以被分解为一系列独立操作、这些操作构成指令执行的一个周期;
机器指令的执行需要三个步骤:取指令、解码和执行(在使用内存操作数时还需要额外的取操作数和存储输出操作数步骤)
取指令:控制单元从指令队列取得指令并递增指令指针(IP)值,指令指针也称为程序计数器(program counter)
解码:控制单元对指令进行解码以确定该指令执行的操作。控制单元把输入操作数传给算术逻辑单元,并向算术逻辑单元发送信号指明要执行的操作
取操作数:
执行:算术逻辑单元执行,以有名寄存器和内部寄存器作为操作数,将运算输出结果送入有名寄存器或内存,然后更新反应处理器的状态的标志
存储输出操作数:

多级流水线
指令执行周期中的一步至少占用一个系统时钟滴答。六级流水线技术和其执行部件如下:

  1. 总线接口单元(BIU):访问存储器并提供输入输出
  2. 代码预取单元:从BIU接受机器指令并将其插入到称为指令队列的存储区域
  3. 代码解码单元:对预取队列中的机器指令进行解码,将它们翻译为微代码
  4. 执行单元:执行指令解码单元产生的微代码
  5. 分段部件:把逻辑地址转换为线性地址并进行保护检查
  6. 分页部件:把线性地址转换为物理地址,进行页保护检查并保留一个最近访问页的列表
    多级流水线/超标量体系结构示意图P25

内存的读取
程序的吞吐量依赖于内存的的访问速度。
从内存中读取指令或者数据需要若干个步骤,时钟周期开始于时钟信号由高变低的时候,俗称为下降沿,代表状态之间进行转换所需要的时间。
读取内存时,每个时钟周期发生的事件:

  1. 内存操作数的地址位被放在地址总线上(ADDR)
  2. 读取线(RD)设为低(0),以通知存储器要读取一个值
  3. CPU等待一个周期,给存储器一些时间作出响应。在这个时钟周期里,内存控制器把数据放在数据总线上
  4. 读取线变为1,通知CPU在数据总线上读取数据

缓存(Cache memory): 由于常规内存和CPU相比很慢,因此计算机使用高速缓存存放最近使用的指令和数据
“程序第一次读取某块程序时,在缓存中保留一份副本。程序再次读取同一数据时,现在缓存内查找。如果缓存未命中则必须从常规内存中读取”

程序如何运行

  1. OS在当前磁盘目录中查找程序文件名,如果没找到,就在预先定义的目录列表中查找,如果操作系统还是找不到文件名,则显示一条错误信息;
  2. 如果找到,则获取磁盘上程序文件的基本信息,包括文件的大小和在磁盘驱动器上的物理位置;
  3. OS确定下一块可用内存的地址,将程序文件装入内存,然后将程序大小和位置等信息记录在一张表上(描述符表)。操作系统还要调整程序内的指针值,使其指向程序开始地址;
  4. OS开始执行一条分支转移指令,使CPU从程序的第一条机器指令开始执行。程序一旦开始执行,就称为一个进程,OS为进程分配一个标识数字(进程ID),用于在进程运行期间对其进行追踪
  5. 操作系统的任务是跟踪进程的执行并且响应进程对系统资源的请求。
  6. 进程终结时候,其句柄被删除,进程使用的内存也被释放以便其他程序使用

多任务
多任务操作系统同时运行多个任务,一个任务可以是程序或是一个执行线程
一个进程拥有自己的内存并且可以包括多个线程。进程内的所有线程共享进程的内存空间。例如游戏程序可以分别使用独立的线程控制多个图形对象。
大多数现代操作系统同时执行与硬件交互,用户界面显示,后台文件处理等多个任务。CPU实际上一次只能执行一条指令,因此一个被称为调度程序的操作系统部件为每个任务分配一小部分CPU时间(时间片)。在一个时间片内,CPU执行一系列命令,时间片结束停止执行。通过快速的任务切换,操作系统给人同时处理多个任务的假象。
多任务操作系统运行在支持任务切换的处理器上,对于每个任务,处理器在切换时先保存当前任务状态(处理器寄存器、程序计数器、状态标志以及任务所使用的内存内容),通常具有不同的优先级,并根据优先级打断低级任务,使系统更稳定。比如说:一个系统陷入了循环死锁,停止对输入进行响应,键盘处理程序能够响应用户的Ctrl+Alt+De命令并终止问

IA-32处理器体系结构
三种基本操作模式:保护模式、实地址模式和系统管理模式+虚拟9096模式

  1. 保护模式(Protected Mode):保护模式是处理器的基本模式,在保护模式下,所有指令和特性都是可用的,程序被赋予了独特的内存区域(段),处理器组织程序访问已分配段之外的其他内存
  2. 虚拟8086模式(Visual-8086 Mode): 在保护模式下,处理器可以在安全的多任务环境中执行实地址模式的软件。如MS-DOS程序。
  3. 实地址模式(Real-address Mode):实现了Intel8086处理器的程序设计环境,并具有切换模式的能力
  4. 系统管理模式(System Management Mode):为操作系统实现电源管理和系统安全等功能的机制

基本执行环境
保护模式下,IA-32处理器可以访问高达4GB的内存,实地址模式程序只能访问1MB的内存

————————————————————————————————————————

事实上,我所学习的远不止以上这些,但因为整理笔记所需的时间太长,而我课业繁重,这就是我尽力而为的结果了。但我想在此记录一些这两周我的尝试:
昨天和前天,我通过OSdev Community的资料,试着搭建了编写操作系统的环境,但由于限制过多,最终我也没有成功(虽然我为此尝试了数个小时)。然后我意识到,我需要更好的指导,于是便购买了一本‘Oranges操作系统的实现’,并在这本书的帮助下开始了环境的搭建。到此,我已经在Ubuntu上将交叉编译环境搭建完成,并试着写了第一个引导程序:

Actually, those things which I studied are far beyond this, but since trying to make a note cost me many time, and my classes were always driving me super busy…
And yesterday, I tried to build the environment for me to writing the OS by using OSdev community, but since there are many restriction by different version application, I eventually gave up using this community. And then I purchase a book to help me, called "Orange to realize a operating system’. With this book’s help. I have built the cross complier on my visual computer bases on Ubuntu system, and I tried to write this Bootloader:

	org 07c00h
	mov ax, cs
	mov ds, ax
	mov ex, ax
	call Dispstr
	jmp $
Dispstr:
	mov ax, BootMessage
	mov bp, ax
	mov cx, 16
	mov bx, 000ch
	mov dl, 0
	int 10h
	ret
BootMessage:			db "Hello,␣OS␣world!"
times 510 - ($ - $$)	db 0
dw	  0xaa55

This is all what I have done in two weeks. Hope I will one day genuinely make my goal come true…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值