计算机系统总结

抽空把深入了解计算机系统简要看了一遍。这里做个小总结。

计算机系统的基本特性

并发,共享,虚拟,异步。
并发指在计算机系统中同一时间段内共同运行着多个程序。(区别并行)具体包括用户程序与用户程序,用户程序与系统程序。
共享指操作系统程序和多个用户程序共享系统资源(包括cpu运行时间,内存分配)。
虚拟(主要指Virtual Memory)指通过技术使得物理实体对应虚拟逻辑对象。如虚拟内存将物理内存对应到程序享用的虚拟地址,这样每个进程都仿佛独占内存。
异步。同步异步是一个重要的区分特性。同步指几个进程指令需要有先后的执行,如操作一必须在操作二完成后开始执行。而异步指的是进程以不可预知的速度向前推进。每个进程何时执行,合适暂停,以何样的速度推进都是不可预知的。(好像和我理解的异步有点不一样)

操作系统的主要功能

进程控制,进程同步,进程通信,调度。
临界资源:一次只能宫一个进程访问的资源。临界区:访问临界区的程序。当一个进程进入临界区时,其他进程无法进入临界区。
对临界区加锁可以实现互斥。mutex和semphore都可以充当锁子。
进程同步指的是在异步环境下一组并发进程通过相互发送消息进行互相合作,互相等待,使得各自进程按照一定速度执行的过程。
进程通信:进程间通信有五种方式,分别是pipe,FIFO,signal,semaphore,共享内存。
pipe:单向,有亲缘,只存在于内存中(通过read,write读写)。
FIFO:命名管道,无关进程也可以交换数据。以文件形式存在文件系统中。
signal:消息链接表,存放在内核中。根据优先级来确定先后,独立于发送接收进程(进程终止,队列仍旧存在),可以实现随机查询,无关次序。
semaphore:计数器。P:wait until > 0,semaphore-=1;V:semaphore+=1。用于进程同步,原子操作(即只存在执行或不执行,没有中间状态)。
共享内存:最快的通信方式。在内存中开辟一块供多个进程操作。需要配合semaphore。
操作系统的任务调度:FIFO(FCFS),SJF(Shortest job first),Round Robin,多层反馈队列,高响应比优先调度。
Round Robin:每个就绪进程获得一小段CPU时间,时间段用完后,进程交出cpu,重新回到就绪队列,等待下一次分配。
多层反馈队列:将任务分配到不同优先级的队列中。有以下几个规则。

  1. 开始时所有任务都是最高优先级。2. 如果任务在规定时间片中没有执行完毕(没有block)则将他下放到下一个优先级。3.每隔一段时间,重新分配优先级(即将所有任务放到最高级中)。
    高响应比优先调度。对每一个就绪进程计算相应比,执行最高的那个。相应比=(等待时间+执行时间)/执行时间

线程与进程

进程是系统分配资源和调度的基本单位。当一个程序要执行时,系统会建立进程并为其分配资源。
线程是进程的一个实体。一个进程可以有一个或多个线程。线程自己不拥有资源,但是可以对进程的资源进行操作。
线程之间可以共享的部分:数据段,代码段,堆,File Descriptor(文件描述表)。线程之间不可以共享的部分:stack,program counter,register state。
线程与进程的区别:进程是一个具有独立功能的活动,进程之间相互独立,通信需要通过核来完成。线程本省不具备资源,他是系统计算统筹的单位。进程有独立的地址空间,一段崩溃后,不会影响其他进程。线程则没有独立的地址空间,一旦线程出现了问题,则整个进程都都会崩溃。进程切换时要比线程消耗大。

死锁

死锁指在多个并发(很重要)进程中,如果每个进程持有某种资源而又等待别的进程释放资源,并且维持这种状态都不能推进的一种状态。
条件:1. 互斥。一个资源只能被一个进程使用。2. 不可抢占。进程不能从别人手中抢占资源。3. 不释放。进程在自己等待状态不释放已有资源。4. 进程与资源形成闭合环路状态。
银行家算法:每一个进程进入系统时,先声明自己可能需要的资源总量。系统在选择执行某一个任务前,先检查该任务是否安全。即假如满足所选任务的需求,是否还有足够的资源满足剩下资源需求最大的进程的请求。如果安全,则分配执行,否则,该进程会被阻塞。
银行家算法是一种预防死锁的方法,而并非打破死锁的方法。打破死锁需要破坏其四条条件之一。1. 强制资源可以共享。2. 进程可以抢占已被占有的资源。3. 进程在阻塞情况下释放自己经占有的资源。4. 检查是否闭合环路。

连续分配方式

为一个用户程序分配一个连续的内存空间。可以分为单一连续分配,固定分区分配,动态分区分配,动态重定位分区分配。
单一连续分配:将内存分为系统区(内存低端)和高地址(内存高端)。静态分配(作业一旦进入,等待运行结束才可以释放内存)。适用于单用户单任务的os。
固定分区分配:内存空间划分为若干个固定大小的分区。一个作业装入一个分区。
动态分区分配:在作业进入内存时,根据作业大小动态的建立分区。1. 基于顺序搜索的动态分区分配算法。2. 基于索引搜索的动态分区分配算法。
动态重定位分区分配:同动态分区分配基本一致,增加了“紧凑”。如果没有单一连续空间满足需求,则将其他任务所使用的空间堆积在一起。

虚拟储存器

在主存中只保存活动区域,其余所需数据放在disk(磁盘)中。
从程序角度来看,程序可以申请超过内存本身大小的空间。所申请的虚拟页,存放在内存和硬盘中。
虚拟页可以分为已缓存(在内存中),为缓存(在disk中),未分配(没有数据与其关联)。
程序访问为缓存和未分配状态的page都会造成缺页中断。
缺页中断在实际操作中的表现为程序访问某一虚拟地址,其对应的page table validation bit为0.
产生缺页中断后,会采用LRU(least recently used)算法挑选一个牺牲页面同disk中的请求页置换。