程序会重复打印传入的字符串,Spin() 函数用于暂停 1 秒。
只有一个处理器,但 4 个程序似乎在同时运行。
将单个 CPU 转化为看似无限数量的 CPU,从而让多个程序看起来同时运行,这就是虚拟化 CPU。
可以看到两个程序在相同地址分配了内存,并独立更新该处的值。
这就是虚拟化内存,每个进程访问自己的私有虚拟地址空间,操作系统将其映射到机器的物理内存上。
counter++;
一些结果与预期不同,这是因为 counter 自增需要 3 条指令:
将 counter 的值从内存读取到寄存器。
将寄存器中的值自增、将寄存器中的值写回内存。
这 3 条指令不是原子方式执行。
无法在本地复现此实例,原因不明,可能是并发数太少。
DRAM 是易失性的,需要硬件和软件来持久地保存数据。
软件指文件系统。
与 CPU 和内存不同,操作系统不会对每个程序虚拟化磁盘。
程序向操作系统发出 3 个系统调用:
提供高性能,在提供虚拟化和其它 OS 功能的情况下,减少时间或空间上的开销。
提供保护,即在程序之间以及在 OS 和应用程序之间提供保护,让进程彼此隔离。
提供高度的可靠性。
OS 基本只是一组常用函数库,程序以过程调用来访问。
OS 一次运行一个程序,计算模式通常是批处理。
系统调用诞生。与过程调用不同,系统调用把控制转移到 OS 中同时提高硬件特权级别,用户程序以用户模式运行,这意味着硬件限制了应用程序的功能,例如不能直接进行磁盘 I/O、访问物理内存页、在网络上发送数据包等。
通常通过陷阱(trap)硬件指令发起系统调用,硬件将控制转移到陷阱处理程序,同时将特权级别提升到内核模式,在内核模式下,OS 可以完全访问系统硬件。OS 完成请求时,通过陷阱返回指令将控制权交还给用户,该指令返回到用户模式,同时将控制权交还给应用程序。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。