计算机系统基本概念
用于管理计算机本身的软件称为 系统软件 ,可以分成两块:
一块是 平台性 的,如操作系统内核、驱动、运行库;
另外一块是 用于程序开发 的,如编译器、汇编器、链接器。
多道程序: 通过监控程序使CPU不空闲,一空闲,就把等待着的程序启动(策略粗糙,不分轻重)。
分时系统: 部分系统调用时,OS判断是否有其他程序在等待,有就让出CPU。(问题:如果有1个程序进行耗时运算或陷入无限循环,不进行系统调用,OS就好像死机了一样。
多任务系统: 通过抢占式分配CPU。所有应用程序以进程的方式,运行在比OS权限低的级别。CPU由OS进行分配,每个进程有 优先级 。OS将CPU执行的进程快速切换,造成了很多进程同时运行的假象。
物理磁盘分为多个 盘片 ,每个盘片 2个盘面 ,每面按 同心圆 分为若干 磁道 ,每个磁道分为若干 扇区 ,每个扇区一般存储 512字节 数据。
现代磁盘已经演进为 => 屏蔽了复杂的硬件细节,通过LBA(Logical Block Address), 对整个磁盘的扇区从001进行编号 。
早期,各程序是直接运行在物理内存上的,
因此带来了3个问题:
为此提出过2个解决方案:
这个方案解决了问题1、3,但是没有解决连续内存的问题,于是提出了方案2。
每个进程由1~3个线程组成,会 共享进程的text、data、heap段中的数据,寄存器和栈中的数据不共享 。
线程有三种状态:
每个线程拥有一段可执行的时间,称为 时间片 。
优先级调度 + 轮转法 :
每个线程有优先级,高优先级的线程更早被分配时间片。
线程可分为 IO密集型线程 (经常IO主动放弃时间片)和 CPU密集型线程 (很少等待IO,一直在进行运算),
其中IO密集型线程更容易获得优先级的提升。
导致的问题: 进程饿死 ,优先级过低的线程,始终分配不到时间片,无法执行。
解决:等待过久的线程将获得优先级提升。
Linux下不存在真正意义上的线程概念,都称为 任务 (task)。但是不同的任务间可以共享内存空间,构成同一个进程,这些任务也就成了这个进程里的线程。