#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
\n 换行符
"hello,world/n" 开始时在磁盘上,然后被复制到主存,最后从主存上复制到显示设备。
从程序员的角度来看,这些复制就是开销,减慢了程序“真正”的工作。因此,系统设计者
的一个主要目标就是使这些复制操作尽可能快地完成。
意识到高速缓存存储器存在的应用程序员能够利用高速缓存将程序的性能提高一个数量级。
在处理器和一个较大较慢的设备之间插入一个更小更快的存储设备(例如高速缓存)的想法
已经成为一个普遍的观念。
在这个层次结构中,从上至下,设备的访问速度越来越慢、容量越来越大,并且每字节的造价也越来越便宜。
我们可以把操作系统看成是应用程序和硬件之间插入的一层软件。
所有应用程序对硬件的操作尝试都必须通过操作系统。
操作系统有两个基本功能:
1)防止硬件被失控的应用程序滥用
2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
文件是对I/O设备的抽象表示
虚拟内存是对主存和磁盘I/O设备的抽象表示。
进程则是对处理器、主存和I/O设备的抽象表示。
进程是操作系统对一个正在运行的程序的一种抽象。
在一个系统上可以同时运行多个进程,而每个进程都好像是独占地使用硬件。
操作系统实现这种交错执行的机制成为上下文切换。
从一个进程到另一个进程的抓换是由操作系统内核(kernel)管理的。
内核不是一个独立的进程。相反,它是系统管理全部进程所用代码和数据结构的集合。
尽管通常我们认为一个进程只有单一的控制流,但是现代系统中,一个进程实际上可以由
多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和
全局数据。
由于网络服务器中对并行处理的需求,线程成为越来越重要的编程模型,因为多线程之间比多
进程更容易共享数据,也因为线程一般来说都比进程更高效。
虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。
在Linux中,地址空间最上面的区域是保留给操作系统中的代码和数据的,这对所有进程来说都是一样。