系统硬件组成

image-20211104141809076

运行hello程序

1.在键盘上输入命令“./hello”后,shell程序将字符逐一读入寄存器,再把它放到内存中。

2.回车时,shell执行一系列指令来加载可执行的hello文件,这些指令将hello目标文件中的代码和数据从磁盘复制到主存。

3.一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello程序的main程序中的机器语言指令。这些指令将“hello world\n”字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。

操作系统管理硬件

操作系统是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统(图1-11)。

文件是对 I/O 设备的抽象表示,虛拟内存是对主存和磁盘 I/O 设备的抽象表示,进程则是对处理器、主存和 I/O 设备的抽象表示(图1-11)。

image-20211104141843176

进程

**操作系统保持跟踪进程运行所需的所有状态信息。这种状态,也就是上下文,**包括许多信息,比如PC 和奇存器文件的当前值,以及主存的内容。在任何一个时刻,单处理器系统都只能执行一个进程的代码。当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新进程。新进程就会从它上次停止的地方开始。图1-12 展示了示例程序运行场景的基本理念。 示例场景中有两个并发的进程:shell 进程和 hello 进程。最开始,只有shell 进程在运行,即等待命令行上的输入。当我们让它运行 hello 程序时,shell 通过调用一个专门的函数,即系统调用,来执行我们的请求,系统调用会将控制权传递给操作系统。操作系统保存shell 进程的上下文,创建一个新的 hello 进程及其上下文,然后将控制权传给新的 hello进程。hello进程终止后,操作系统恢复 shell 进程的上下文,并将控制权传回给它,shell 进程会继续等待下一个命令行输人。 如图 1-12所示,**从一个进程到另一个进程的转换是由操作系统内核(kernel)管理的。**内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,比如读写文件,它就执行一条特殊的系统调用(system call)指令,将控制权传递给内核。然后内核执行被请求的操作并返回应用程序。注意,内核不是一个独立的进程。相反,它是系统管理全部进程所用代码和数据结构的集合。

image-20211104142227823

内存指引错误

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
typedef struct
{
	int a[2];
	double d;
} struct_t;
 

double fun(int i){
	volatile struct_t s;
	s.d = 3.14;
	s.a[i] = 1073741824;
	return s.d;
}
image-20211007150849997

内存系统表现

image-20211007150829607 image-20211007150806110