操作系统_操作系统实验 - CSDN
操作系统 订阅
操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。 展开全文
操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
信息
英文简称
OS
常见系统
Windows,macOS,Linux,iOS,Android
外文名
operating system
体系结构
模块组合结构、层次结构、微内核结构
组成部分
内核、驱动程序、接口库、外围
中文名
操作系统
功    能
处理器管理、存储器管理、设备管理、文件管理
基本类型
批处理系统、分时操作系统、实时操作系统
特    征
并发、共享、虚拟、异步
操作系统简介
在计算机中,操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现为其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口;如果从设计人员的角度来说,就是指各式各样模块和单元之间的联系。事实上,全新操作系统的设计和改良的关键工作就是对体系结构的设计,经过几十年以来的发展,计算机操作系统已经由一开始的简单控制循环体发展成为较为复杂的分布式操作系统,再加上计算机用户需求的愈发多样化,计算机操作系统已经成为既复杂而又庞大的计算机软件系统之一。 [1] 
收起全文
  • 《从零开发操作系统:从加电自检到内核引导》 主讲:丁宋涛 如果你想自己写一个小的操作系统,一定会发现无从下手,因为在传统的学历教育中,操作系统课程过于关注理论,不会告诉你要用什么工具, 什么语言,...
  • 操作系统学习总结(超赞!!!)

    万次阅读 多人点赞 2018-02-27 20:28:56
    原文地址操作系统基本特征1. 并发并发性是指宏观上在一段时间内能同时运行多个程序,而并行性则指同一时刻能运行多个指令。并行需要硬件支持,如多流水线或者多处理器。操作系统通过引入进程和线程,使得程序能够...

    我是技术搬运工,好东西当然要和大家分享啦.原文地址

    操作系统基本特征

    1. 并发

    并发性是指宏观上在一段时间内能同时运行多个程序,而并行性则指同一时刻能运行多个指令。

    并行需要硬件支持,如多流水线或者多处理器。

    操作系统通过引入进程和线程,使得程序能够并发运行。

    2. 共享

    共享是指系统中的资源可以供多个并发的进程共同使用。

    有两种共享方式:互斥共享和同时共享。

    互斥共享的资源称为临界资源,例如打印机等,在同一时间只允许一个进程访问,否则会出现错误,需要用同步机制来实现对临界资源的访问。

    3. 虚拟

    虚拟技术把一个物理实体转换为多个逻辑实体。主要有两种虚拟技术:时分复用技术和空分复用技术,例如多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占有处理器,每次只执行一小个时间片并快速切换,这样就好像有多个处理器进行处理。

    4. 异步

    异步是指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。

    系统调用

    如果一个进程在用户态需要用到操作系统的一些功能,就需要使用系统调用从而陷入内核,由操作系统代为完成。

    可以由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。

    中断分类

    1. 外中断

    由 CPU 执行指令以外的事件引起,如 I/O 结束中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。

    2. 异常

    由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。

    3. 陷入

    在用户程序中使用系统调用。

    大内核和微内核

    1. 大内核

    大内核是将操作系统功能作为一个紧密结合的整体放到内核,由于各模块共享信息,因此有很高的性能。

    2. 微内核

    由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。但是需要频繁地在用户态和核心态之间进行切换,会有一定的性能损失。

    第二章 进程管理

    进程与线程

    1. 进程

    进程是操作系统进行资源分配的基本单位。

    进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。

    2. 线程

    一个线程中可以有多个线程,是独立调度的基本单位。同一个进程中的多个线程之间可以并发执行,它们共享进程资源。

    3. 区别

    ① 拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问率属进程的资源。

    ② 调度:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。

    ③ 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置。而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此,这些线程之间的同步与通信非常容易实现,甚至无需操作系统的干预。

    ④ 通信方面:进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以通过直接读/写进程数据段(如全局变量)来进行通信。

    举例:QQ 和 浏览器是两个进程,浏览器进程里面有很多线程,例如 http 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 http 请求时,浏览器还可以响应用户的其它事件。

    进程状态的切换

    阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU,缺少 CPU 会让进程从运行态转换为就绪态。

    只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。

    调度算法

    需要针对不同环境来讨论调度算法。

    1. 批处理系统中的调度

    1.1 先来先服务(FCFS)

    first-come first-serverd。

    调度最先进入就绪队列的作业。

    有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。

    1.2 短作业优先(SJF)

    shortest job first。

    调度估计运行时间最短的作业。

    长作业有可能会饿死,处于一直等待短作业执行完毕的状态。如果一直有短作业到来,那么长作业永远得不到调度。

    1.3 最短剩余时间优先(SRTN)

    shortest remaining time next。

    2. 交互式系统中的调度

    2.1 优先权优先

    除了可以手动赋予优先权之外,还可以把响应比作为优先权,这种调度方式叫做高响应比优先调度算法。

    响应比 = (等待时间 + 要求服务时间) / 要求服务时间 = 响应时间 / 要求服务时间

    这种调度算法主要是为了解决 SJF 中长作业可能会饿死的问题,因为随着等待时间的增长,响应比也会越来越高。

    2.2 时间片轮转

    将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。

    时间片轮转算法的效率和时间片有很大关系。因为每次进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太短,进程切换太频繁,在进程切换上就会花过多时间。

    2.3 多级反馈队列

    ① 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权越高的队列中,为每个进程所规定的执行时间片就越小。

    ② 当一个新进程进入内存后,首先将它放入第一队列的末尾,按 FCFS 原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入下一个队列的队尾。

    ③ 仅当前 i -1 个队列均空时,才会调度第 i 队列中的进程运行。

    优点:实时性好,也适合运行短作业和长作业。

    2.4 短进程优先

    3. 实时系统中的调度

    实时系统要一个服务请求在一个确定时间内得到响应。

    分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。

    进程同步

    1. 临界区

    对临界资源进行访问的那段代码称为临界区。

    为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。

    // entry section
    // critical section;
    // exit section

    2. 同步与互斥

    同步指多个进程按一定顺序执行;互斥指多个进程在同一时刻只有一个进程能进入临界区。

    同步是在对临界区互斥访问的基础上,通过其它机制来实现有序访问的。

    3. 信号量

    **信号量(Samaphore)**是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。

    • down : 如果信号量大于 0 ,执行 - 1 操作;如果信号量等于 0,将进程睡眠,等待信号量大于 0;
    • up:对信号量执行 + 1 操作,并且唤醒睡眠的进程,让进程完成 down 操作。

    down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。

    如果信号量的取值只能为 0 或者 1,那么就成为了互斥量(Mutex),0 表示临界区已经加锁,1 表示临界区解锁。

    typedef int samaphore;
    samaphore mutex = 1;
    void P1() {
        down(mutex);
        // 临界区
        up(mutex);
    }
    
    void P2() {
        down(mutex);
        // 临界区
        up(mutex);
    }

    使用信号量实现生产者-消费者问题

    使用一个互斥量 mutex 来对临界资源进行访问;empty 记录空缓冲区的数量,full 记录满缓冲区的数量。

    注意,必须先执行 down 操作再用互斥量对临界区加锁,否则会出现死锁。如果都先对临界区加锁,然后再执行 down 操作,考虑这种情况:生产者对临界区加锁后,执行 down(empty) 操作,发现 empty = 0,此时生成者睡眠。消费者此时不能进入临界区,因为生产者对临界区加锁了,也就无法对执行 up(empty) 操作,那么生产者和消费者就会一直等待下去。

    #define N 100
    typedef int samaphore;
    samaphore mutex = 1;
    samaphore empty = N;
    samaphore full = 0;
    
    void producer() {
        while(TRUE){
            int item = produce_item;
            down(empty);
            down(mutex);
            insert_item(item);
            up(mutex);
            up(full);
        }
    }
    
    void consumer() {
        while(TRUE){
            down(full);
            down(mutex);
            int item = remove_item(item);
            up(mutex);
            up(empty);
            consume_item(item);
        }
    }

    4. 管程

    使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制,而管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。

    c 语言不支持管程,下面的示例代码使用了类 Pascal 语言来描述管程。示例代码中的管程提供了 insert() 和 remove() 方法,客户端代码通过调用这两个方法来解决生产者-消费者问题。

    monitor ProducerConsumer
        integer i;
        condition c;
        
        procedure insert();
        begin
        
        end;
        
        procedure remove();
        begin
        
        end;
    end monitor;

    管程有一个重要特性:在一个时刻只能有一个进程使用管程。进程在无法继续执行的时候不能一直占用管程,必须将进程阻塞,否者其它进程永远不能使用管程。

    管程引入了 条件变量 以及相关的操作:wait()signal() 来实现同步操作。对条件变量执行 wait() 操作会导致调用进程阻塞,把管程让出来让另一个进程持有。signal() 操作用于唤醒被阻塞的进程。

    使用管程实现生成者-消费者问题

    monitor ProducerConsumer
        condition full, empty;
        integer count := 0;
        condition c;
    
        procedure insert(item: integer);
        begin
            if count = N then wait(full);
            insert_item(item);
            count := count + 1;
            if count = 1 ten signal(empty);
        end;
    
        function remove: integer;
        begin
            if count = 0 then wait(empty);
            remove = remove_item;
            count := count - 1;
            if count = N -1 then signal(full);
        end;
    end monitor;
    
    procedure producer
    begin
        while true do
        begin
            item = produce_item;
            ProducerConsumer.insert(item);
        end
    end;
    
    procedure consumer
    begin
        while true do
        begin
            item = ProducerConsumer.remove;
            consume_item(item);
        end
    end;

    进程通信

    进程通信可以看成是不同进程间的线程通信,对于同一个进程内线程的通信方式,主要使用信号量、条件变量等同步机制。

    1. 管道

    管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的首端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。

    管道提供了简单的流控制机制,进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样地,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。

    Linux 中管道是通过空文件来实现。

    管道有三种:

    ① 普通管道:有两个限制:一是只支持半双工通信方式,即只能单向传输;二是只能在父子进程之间使用;

    ② 流管道:去除第一个限制,支持双向传输;

    ③ 命名管道:去除第二个限制,可以在不相关进程之间进行通信。

    2. 信号量

    信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其它进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

    3. 消息队列

    消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

    4. 信号

    信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

    5. 共享内存

    共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其它进程间通信方式运行效率低而专门设计的。它往往与其它通信机制(如信号量)配合使用,来实现进程间的同步和通信。

    6. 套接字

    套接字也是一种进程间通信机制,与其它通信机制不同的是,它可用于不同机器间的进程通信。

    经典同步问题

    生产者和消费者问题前面已经讨论过。

    1. 读者-写者问题

    允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。

    一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁,一个互斥量 data_mutex 用于对读写的数据加锁。

    typedef int semaphore;
    semaphore count_mutex = 1;
    semaphore data_mutex = 1;
    int count = 0;
    
    void reader() {
        while(TRUE) {
            down(count_mutex);
            count++;
            if(count == 1) down(data_mutex); // 第一个读者需要对数据进行加锁,防止写进程访问
            up(count_mutex);
            read();
            down(count_mutex);
            count--;
            if(count == 0) up(data_mutex);
            up(count_mutex);
        }
    }
    
    void writer() {
        while(TRUE) {
            down(data_mutex);
            write();
            up(data_mutex);
        }
    }

    2. 哲学家进餐问题

    五个哲学家围着一张圆周,每个哲学家面前放着饭。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先一根一根拿起左右两边的筷子。

    下面是一种错误的解法,考虑到如果每个哲学家同时拿起左手边的筷子,那么就无法拿起右手边的筷子,造成死锁。

    #define N 5
    #define LEFT (i + N - 1) % N
    #define RIGHT (i + N) % N
    typedef int semaphore;
    semaphore chopstick[N];
    
    void philosopher(int i) {
        while(TURE){
            think();
            down(chopstick[LEFT[i]]);
            down(chopstick[RIGHT[i]]);
            eat();
            up(chopstick[RIGHT[i]]);
            up(chopstick[LEFT[i]]);
        }
    }

    为了防止死锁的发生,可以加一点限制,只允许同时拿起左右两边的筷子,方法是引入一个互斥量,对拿起两个筷子的那段代码加锁。

    semaphore mutex = 1;
    
    void philosopher(int i) {
        while(TURE){
            think();
            down(mutex);
            down(chopstick[LEFT[i]]);
            down(chopstick[RIGHT[i]]);
            up(mutex);
            eat();
            down(mutex);
            up(chopstick[RIGHT[i]]);
            up(chopstick[LEFT[i]]);
            up(mutex);
        }
    }

    第三章 死锁

    死锁的条件

    1. 互斥
    2. 请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    3. 不可抢占
    4. 环路等待

    死锁的处理方法

    1. 鸵鸟策略

    把头埋在沙子里,假装根本没发生问题。

    这种策略不可取。

    2. 死锁预防

    在程序运行之前预防发生死锁。

    2.1 破坏互斥条件

    例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。

    2.2 破坏请求与保持条件

    一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。

    2.3 破坏不可抢占条件

    2.4 破坏环路等待

    给资源统一编号,进程只能按编号顺序来请求资源。

    3. 死锁避免

    在程序运行时避免发生死锁。

    3.1 安全状态

    图 a 的第二列 has 表示已拥有的资源数,第三列 max 表示总共需要的资源数,free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源,运行结束后释放 B,此时 free 变为 4;接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。

    定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。

    3.2 单个资源的银行家算法

    一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。

    上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。

    3.3 多个资源的银行家算法

    上图中有五个进程,四个资源。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。最右边的 E、P 以及 A 分别表示:总资源、已分配资源以及可用资源,注意这三个为向量,而不是具体数值,例如 A=(1020),表示 4 个资源分别还剩下 1/0/2/0。

    检查一个状态是否安全的算法如下:

    ① 查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。

    ② 假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。

    ③ 重复以上两步,直到所有进程都标记为终止,则状态时安全的。

    4. 死锁检测与死锁恢复

    不试图组织死锁,而是当检测到死锁发生时,采取措施进行恢复。

    4.1 死锁检测算法

    死锁检测的基本思想是,如果一个进程所请求的资源能够被满足,那么就让它执行,释放它拥有的所有资源,然后让其它能满足条件的进程执行。

    上图中,有三个进程四个资源,每个数据代表的含义如下:

    E 向量:资源总量A 向量:资源剩余量C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量R 矩阵:每个进程请求的资源数量

    进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P1 可以执行,执行后释放 P1 拥有的资源, A = (4 2 2 2) ,P2 也可以执行。所有进程都可以顺利执行,没有死锁。

    算法总结如下:

    每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。

    ① 寻找一个没有标记的进程 Pi,它所请求的资源小于等于 A。② 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 ①。③ 如果有没有这样一个进程,算法终止。

    4.2 死锁恢复

    ① 利用抢占恢复② 杀死进程

    第四章 存储器管理

    虚拟内存

    每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一 页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。

    当程序引用到一部分在物理内存中的地址空间时,由硬件立即执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。

    分页与分段

    1. 分页

    用户程序的地址空间被划分为若干固定大小的区域,称为“页”。相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配,由一个页表来维护它们之间的映射关系。

    2. 分段

    上图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态递增的特点会导致覆盖问题的出现。

    分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,可以动态改变。

    每个段都需要程序员来划分。

    3. 段页式

    用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。

    用分页方法来分配和管理实存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的。但它又可按段实现共享和保护。

    4. 分页与分段区别

    ① 对程序员的透明性:分页透明,但是分段需要程序员显示划分每个段。

    ② 地址空间的维度:分页是一维地址空间,分段是二维的。

    ③ 大小是否可以改变:页的大小不可变,段的大小可以动态改变。

    ④ 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。

    页面置换算法

    在程序运行过程中,若其所要访问的页面不在内存而需要把它们调入内存,但是内存已无空闲空间时,系统必须从内存中调出一个页面到磁盘对换区中,并且将程序所需要的页面调入内存中。页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。

    1. 最佳(Optimal)

    所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。

    是一种理论上的算法,因为无法知道一个页面多长时间会被再访问到。

    举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列:

    7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

    进程运行时,先将 7,0,1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。

    2. 先进先出(FIFO)

    所选择换出的页面是最先进入的页面。

    该算法会将那些经常被访问的页面也被换出,从而使缺页率升高。

    3. 最近最久未使用(LRU, Least Recently Used)

    虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。

    可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶,这样,最近被访问的页面的页面号总是在栈顶,而最近最久未使用的页面的页面号总是在栈底。

    4,7,0,7,1,0,1,2,1,2,6

    4. 时钟(Clock)

    Clock 页面置换算法需要用到一个访问位,当一个页面被访问时,将访问为置为 1。

    首先,将内存中的所有页面链接成一个循环队列,当缺页中断发生时,检查当前指针所指向页面的访问位,如果访问位为 0,就将该页面换出;否则将该页的访问位设置为 0,给该页面第二次的机会,移动指针继续检查。

    第五章 设备管理

    磁盘调度算法

    当多个进程同时请求访问磁盘时,需要进行磁盘调度来控制对磁盘的访问。磁盘调度的主要目标是使磁盘的平均寻道时间最少。

    1. 先来先服务(FCFS, First Come First Serverd)

    根据进程请求访问磁盘的先后次序来进行调度。优点是公平和简单,缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。

    2. 最短寻道时间优先(SSTF, Shortest Seek Time First)

    要求访问的磁道与当前磁头所在磁道距离最近的优先进行调度。这种算法并不能保证平均寻道时间最短,但是比 FCFS 好很多。

    3. 扫描算法(SCAN)

    SSTF 会出现进行饥饿现象。考虑以下情况,新进程请求访问的磁道与磁头所在磁道的距离总是比一个在等待的进程来的近,那么等待的进程会一直等待下去。

    SCAN 算法在 SSTF 算法之上考虑了磁头的移动方向,要求所请求访问的磁道在磁头当前移动方向上才能够得到调度。因为考虑了移动方向,那么一个进程请求访问的磁道一定会得到调度。

    当一个磁头自里向外移动时,移到最外侧会改变移动方向为自外向里,这种移动的规律类似于电梯的运行,因此又常称 SCAN 算法为电梯调度算法。

    4. 循环扫描算法(CSCAN)

    CSCAN 对 SCAN 进行了改动,要求磁头始终沿着一个方向移动。

    参考资料

    • Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014.

    • 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001.

    • Bryant, R. E., & O’Hallaron, D. R. (2004). 深入理解计算机系统.

    • 小土刀的面试刷题笔记

    • 进程间的几种通信方式

    展开全文
  • 操作系统基础知识复习总结

    万次阅读 多人点赞 2019-08-17 20:59:38
    操作系统 操作系统概述 操作系统作用 存储管理 处理机管理 设备管理 文件管理 用户接口 操作系统的定义 是管理和控制计算机系统中各种硬件和软件资源、合理地组织计算机工作流程的...

    操作系统

    操作系统概述

    操作系统作用

    1. 存储管理

    这里写图片描述
    2. 处理机管理
    这里写图片描述
    3. 设备管理
    这里写图片描述
    4. 文件管理
    这里写图片描述
    5. 用户接口
    这里写图片描述

    操作系统的定义

    是管理和控制计算机系统中各种硬件和软件资源、合理地组织计算机工作流程的系统软件,是用户与计算机之间的接口。

    • 多道批处理系统
    1. 在内存中同时存放多道程序,在管理程序的控制下交替执行,这些作业共享CPU和系统其他资源。
      
    2. ![这里写图片描述](https://img-blog.csdn.net/20180611133851521)
      
    3. 这里写图片描述
    • 分时系统

    把处理机运行时间分成时间片,按时间片轮转的方式,把处理机分配给各联机作业使用。允许多个用户与计算机直接交互。

    • 实时系统

    系统能及时(或即时)响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。提供即时响应和高可靠性,响应时间快,可以在毫秒级甚至微秒级立即处理。

    操作系统的特征

    1. 并发

      并发是指两个或多个事件在同一时间间隔内发生。

      微观上还是程序在分时地交替执行。

    2. 共享

      共享是指系统中的资源可供内存中多个并发执行的进程共同使用。

      1. 互斥共享方式

        如打印机、磁带机。在一段时间内只允许一个进程访问该资源。

      2. 同时访问方式

        如磁盘设备

    3. 虚拟

      虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。比如说虚拟处理器,虚拟内存,虚拟外部设备

    4. 异步

      在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

    操作系统最基本的特征是并发和共享,两者互为存在条件。

    进程管理

    程序基本概念

    • 程序执行的两种方式:
      1. 顺序执行:一个计算的若干操作必须按照严格的先后次序顺序地执行,这类计算过程就是程序的顺序执行过程。
      2. 并发执行:指一组在逻辑上相互独立的程序或程序段在执行过程中,其执行时间在客观上相互重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。

    进程基本概念

    • 定义

    进程是指一个具有独立功能的程序对某个数据集在处理机上的执行过程和分配资源的基本单位。

    引入进程的概念,以便更好地描述和控制程序的并发执行。

    程序封闭性是指进程执行的结果只取决于进程本身,不会受外界影响。

    • 进程和程序的区别

    这里写图片描述

    • 进程的组成

    进程通常由程序、数据集合和进程控制块PCB三部分组成。程序和它操作的数据是进程存在的静态实体,而专门的数据结构PCB用来描述进程当前的状态、本身的特性等。

    当进程被中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存在PCB中的对应位置,进程状态已被改变为其他的值,例如阻塞态或就绪态。

    PCB是进程存在的唯一标志。故操作系统是根据进程控制块来对并发执行的进程进行控制和管理。

    PCB内含的数据结构主要有:进程标志信息、进程控制信息、进程资源信息、CPU现场信息。

    每个进程包含独立的地址空间,进程各自的地址空间是私有的,只有执行自己地址空间中的程序,且只能访问自己地址空间中的数据,相互访问会导致指针的越界错误。

    对进程的管理和控制功能是通过执行各种原语实现的,如创建原语。

    进程状态

    • 运行态
    • 就绪态
    • 阻塞态
    • 新建态
    • 退出态

    进程创建

    1、给新进程分配一个唯一的进程标识符

    2、给进程分配空间

    3、初始化进程控制块

    4、设置正确的连接

    5、创建或扩充其他数据结构

    线程

    线程基本概念

    引入线程,是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

    线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元。

    线程共享进程拥有的全部资源。

    线程不拥有系统资源,但是它可以访问进程所拥有的系统资源。

    线程没有自己独立的地址空间,他共享他所属的进程的空间。

    线程的实现方式

    1. 用户级线程
    2. 内核级线程

    进程间通信

    • 共享存储
    • 消息传递
    • 管道通信:固定大小,半双工通信,即某一时刻只能单向传输。
    • 共享文件

    处理机调度

    调度的层次

    1. 作业调度,又称高级调度。就是内存与辅存之间的调度。
    2. 中级调度。又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态。当他们具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程再重新调入内存。
    3. 进程调度。又称为低级调度。按照某种方法和策略从就绪队列中选取一个进程给CPU。

    进程调度方式

    1. 非剥夺调度方式
    2. 剥夺调度方式

    典型的调度算法

    1. 先来先服务调度算法(FCFS)

    2. 短作业优先(SJF)调度算法

      从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行。

    3. 短进程优先(SPF)调度算法

      从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行。

    4. 优先级调度算法

      根据能否抢占进程,可将调度算法分为:

      1. 非剥夺式优先级调度算法
      2. 剥夺式优先级调度算法

      根据进程创建后其优先级是否可以改变,分为:

      1. 静态优先级。优先级在创建进程时确定,且在进程的整个运行期间保持不变。
      2. 动态优先级。可动态调整优先级。
    5. 高响应比优先调度算法

      这里写图片描述

    6. 时间片轮转调度算法

    7. 多级反馈队列调度算法

    这里写图片描述

    这里写图片描述

    进程同步

    基本概念

    1. 临界资源

    我们把一次仅允许一个进程使用的资源称为临界资源。

    1. 同步

    同步亦称直接制约关系,他是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。

    实现临界区互斥的基本方法

    软件实现方法

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    硬件实现方法

    1. 中断屏蔽方法

      当一个进程正在使用处理机执行它的临界区代码时,要防止其他进程再进入其临界区访问的最简单方法是禁止一切中断发生。因为CPU只在中断发生时进行进程切换,这样屏蔽中断就能保证当前运行进程将临界区代码顺利地执行完。

    2. 硬件指令方法

      这里写图片描述

      这里写图片描述

    信号量

    信号量只能被两个标准的原语wait(S)和signal(S)来访问,也可以记为“P操作“和”V操作“。

    原语是指完成某种功能且不被分割不被中断执行的操作序列,通常可由硬件来实现完成不被分割执行特性的功能。

    1. 利用信号量实现同步

    这里写图片描述

    1. 利用信号量实现进程互斥

    这里写图片描述

    管程

    管程是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。

    这里写图片描述

    死锁

    所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

    死锁产生的条件

    • 互斥
    • 不剥夺
    • 请求和保持
    • 循坏等待

    死锁的处理策略

    1. 预防死锁

    设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个,以防止发生死锁。

    1. 避免死锁

    在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。

    银行家算法

    这里写图片描述

    1. 死锁的检测及解除

    通过系统的检测机构及时地检测出死锁的发生,然后采取某种措施解除死锁。

    这里写图片描述

    内存管理

    程序执行过程

    这里写图片描述

    逻辑地址空间与物理地址空间

    这里写图片描述

    覆盖与交换

    • 覆盖

    这里写图片描述

    • 交换

    这里写图片描述

    连续分配管理方式

    • 单一连续分配

    这里写图片描述

    • 固定分区分配

    可以有大小相等的分区和大小不等的分区

    会有内部碎片

    • 动态分区分配

    会有外部碎片,可以通过紧凑技术来解决(就是操作系统不时地对进程进行移动和整理,需要动态重定位寄存器支持。

    这里写图片描述

    非连续分配管理方式

    • 分页存储管理
    • 分段存储管理
    • 段页式管理方式

    虚拟内存管理

    1. 传统存储管理方式的特征
    • 一次性:作业必须一次性全部装入内存,方能运行。
    • 驻留性:作业被装入内存后,就一直驻留在内存中,其任何部分都不会被换出,直至作业运行结束。
    1. 局部性原理

      • 时间局部性

      如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。

      所以时间局部性是通过将进来使用的指令和数据保存到高速缓存存储器中。

      • 空间局部性

      一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。

      所以空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。

    页面置换算法

    1. 最佳置换算法(OPT)

    这里写图片描述

    1. 先进先出页面置换算法

    这里写图片描述

    1. 最近最久未使用置换算法(LRU)

    这里写图片描述

    文件系统

    文件的概念

    文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等。

    在用户进行的输入、输出中,是以文件为基本单位。

    文件的属性

    1. 名称
    2. 标识符
    3. 类型
    4. 位置
    5. 大小
    6. 保护
    7. 时间、日期和用户标识

    文件的逻辑结构

    1. 无结构文件(流式文件)

    无结构文件是最简单的文件组织形式。无结构文件将数据按顺序组织成记录并积累保存,他是有序相关信息项的集合,以字节为单位。

    1. 有结构文件(记录式文件)

      1. 顺序文件

      文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储。

      ​ 1. 串结构

      ​ 记录之间的顺序与关键字无关,通常按照存入时间的先后排列。

      ​ 2. 顺序结构

      ​ 指文件中的所有记录按关键字顺序排列。

      1. 索引文件

      2. 索引顺序文件是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项。

      3. 直接文件或散列文件

        给定记录的键值或通过Hash函数转换的键值直接决定记录的物理地址。

    目录结构

    文件控制块和索引

    1. 文件控制块。FCB用来存放控制文件所需要的各种信息的数据结构。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。

      FCB主要包含以下信息:

      1. 基本信息
      2. 存取控制信息
      3. 使用信息
    2. 索引节点

    目录结构

    1. 单级目录结构。整个文件系统中只建立一张目录表,每个文件占一个目录项。
    2. 两级目录结构。将文件目录分为主文件目录和用户文件目录。主文件目录项记录用户名及相应用户文件目录所在的存储位置。用户文件目录项记录该用户文件的FCB信息。
    3. 多级目录结构
    4. 无环图目录结构。引入改种目录结构是为了实现文件共享。

    文件共享

    1. 基于索引结点(硬连接):共享文件指向同一个索引结点
    2. 基于符号链(软连接):保存共享文件的路径名

    文件保护

    1. 口令保护:通过口令访问文件
    2. 加密保护:对文件进行加密处理
    3. 访问控制:根据访问者的身份进行限制

    文件系统层次结构

    文件系统类型:FAT32、NTFS、ext2、ext3、ext4

    这里写图片描述

    目录实现

    1. 线性列表
    2. 哈希表

    文件实现

    1. 文件分配方式
      1. 连续分配
      2. 链接分配
      3. 索引分配

    这里写图片描述

    文件存储器的空间管理

    1. 空闲表法:把所有空闲块组织成表
    2. 空闲链表法:把所有空闲块组织成链表
    3. 位示图:利用二进制的每位记录空闲块
    4. 成组链接:空闲表和空闲链表的结合,适合大的文件系统

    磁盘调度算法

    1. FCFS(先来先服务算法)

    这里写图片描述

    1. 最短寻找时间优先算法(SSTF)算法

    这里写图片描述

    1. 扫描(SCAN)算法(又称电梯算法)

    这里写图片描述

    1. 循环扫描(C-SCAN)算法

    这里写图片描述

    这里写图片描述

    这里写图片描述

    I/O管理

    I/O控制方式

    1. 程序直接控制方式

    2. 中断驱动方式

      允许I/O设备主动打断CPU的允许并请求服务,从而“解放”CPU,使得其向I/O控制器发送读命令后可以继续做其他有用的工作。

    3. DMA方式

      DMA方式的基本思想是在I/O设备和内存之间开辟直接的数据交换通路,彻底“解放”CPU。DMA方式的特点:

      1. 基本单位是数据块
      2. 所传送的数据,是从设备直接送入内存的,或者相反
      3. 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在DMA控制器的控制下完成的。

      这里写图片描述

    4. 通道控制方式

    这里写图片描述

    这里写图片描述

    这里写图片描述

    展开全文
  • 操作系统简介

    千次阅读 2016-10-27 21:31:51
    操作系统 - 计算机管理控制程序 操作系统(Operating System,简称OS)是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责管理与配置...

    操作系统 - 计算机管理控制程序

    操作系统(Operating System,简称OS)是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。操作系统的种类很多,各种设备安装的操作系统可从简单到复杂,可从手机的嵌入式操作系统到超级计算机的大型操作系统。目前流行的现代操作系统主要有AndroidBSDiOSLinuxMac OS XWindowsWindows Phonez/OS等,除了Windowsz/OS等少数操作系统,大部分操作系统都为类Unix操作系统。

    组成部分:内核、驱动程序、接口库、外围

     

    计算机操作系统的发展经历了两个阶段。第一个阶段为单用户、单任务的操作系统  CP/M操作系统之后,还出现了C-DOSM-DOSTRS-DOSS-DOSMS-DOS等磁盘操作系统。

    计算机操作系统发展的第二个阶段是多用户多道作业和分时系统。其典型代表有UNIXXENIXOS/2以及Windows操作系统

    分类方法

    一·应用领域可分为

    桌面操作系统(如Windows系统、Unix、MAC、Linux

    服务器操作系统(如Windows系统Windows Service 2003/Windows service 2008 等Netware:Novel的3.113.124.105.0UnixlSCO SVRBSD UnixSUN SolarisIBM-AIXHP-UFreeBSDX Linux

    嵌入式操作系统(嵌入式Linux,uclinux,ucos2VxWorksWindows Embedded以及应用在智能手机和平板电脑的AndroidiOS

     

    二·所支持用户数可分为

    单用户操作系统(MSDOS、OS/2.Windows)、多用户操作系统(UNIX、Linux、MVS)

     

    三·源码开放程度可分为

    开源操作系统(Linux、FreeBSD)和闭源操作系统(Mac OS X、Windows)

     

    四·硬件结构可分为

    网络操作系统(Netware、Windows NT、OS/2 warp)、多媒体操作系统(Amiga)、和分布式操作系统等;

     

    五·操作系统环境可分为

    批处理操作系统(MVX、DOS/VSE)、分时操作系统( Linux、UNIX、XENIX、Mac OS X)、实时操作系统(iEMX、VRTX、RTOS,RT WINDOWS)

    六·存储器寻址宽

    可以将操作系统分为8位、16位、32位、64位、128位的操作系统。早期的操作系统一般只支持8位和16位存储器寻指宽度,现代的操作系统如LinuxWindows 7都支持32位和64位。

     

     

     Windows操作系统简介

    Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    Windows采用了图形化模式GUI,比起从前的DOS需要键入指令使用的方式更为人性化。随着电脑硬件和软件的不断升级,微软的Windows也在不断升级,从架构的16位、32位再到64位 系统版本从最初的Windows 1.0 到大家熟知的Windows 95Windows 98Windows MEWindows 2000Windows 2003Windows XPWindows VistaWindows 7Windows 8Windows 8.1Windows 10 和 Windows Server服务器企业级操作系统,不断持续更新,微软一直在致力于Windows操作系统的开发和完善。

    版本历史

     

    版本号

    开发代号

    版本

    发布日期

    1.0

    Interface Manager

    Windows 1.0

    1985-11-20

    2.0

    Windows 2.0

    1987-11-1

    3.0

    Windows 3.0

    1990-5-22

    3.1

    Janus

    Windows 3.1

    1992-3-18

    NT 3.1

    NTOS/2

    Windows NT 3.1

    1993-7-27

    3.2

    Janus

    Windows 3.2

    1994-4-14

    4.0

    Chicago

    Windows 95

    1995-8-24

    NT 3.5

    Daytona

    Windows NT 3.5

    1995-11-20

    NT 4.0

    Cairo

    Windows NT 4.0

    1996-7-29

    4.00.950B

    Detroit

    Windows 95 OSR2

    1996-8-24

    4.1

    Memphis

    Windows 98

    1998-6-25

    4.10.2222A

    Memphis

    Windows 98 SE

    1999-5-5

    NT 5.0

    Windows NT 5.0

    Windows 2000

    2000-2-17

    4.9

    Millennium

    Windows ME

    2000-9-14

    NT 5.1(32) NT 5.2(64)

    Whistler

    Windows XP

    2001-10-25

    NT 5.2

    Whistler Server

    Windows Server 2003

    2003-4-24

    NT 6.0

    Longhorn

    Windows Vista

    2005-7-27

    NT 5.2

    Quattro

    Windows Home Server

    2007-1-7

    NT 6.0

    Longhorn Server

    Windows Server 2008

    2008-2-27

    NT 6.1

    Blackcomb,Vienna,Windows 7

    Windows 7

    2009-10-22

    NT 6.1

    Windows Server 7

    Windows Server 2008 R2

    2009-10-22

    NT 6.1

    Vail

    Windows Home Server 2011

    2011-04-05

    NT 6.1

    Windows Thin PC

    2011-07-11

    NT 6.2

    Windows 8

    Windows 8

    2012-10-25

    NT 6.2

    Windows Server 8

    Windows Server 2012

    2012-9-4

    NT 6.3

    Windows Blue

    Windows 8.1

    2013-10-18

    NT 6.3

    Windows Server 2012 R2

    2013-10-18

    NT 6.3.9600.17031

    Windows 8.1 Spring Update

    Windows 8.1 with Update

    2014-04-08
      

    NT 10.0
      

    Windows Threshold
      

    Windows 10
      

    2015-7-29发布 

    NT10.1

    Windows10 Autumn Update

    Windows10 Update 1

    2015-10-29发布

    NT10.2

    Windows10 redstone

    2016-1发布

     

     

     

     

                                                                                                                                                              ——摘自百度百科

     

     

    Linux操作系统简介

    概述

    Linux操作系统诞生于1991 10 5 Linus Torvalds在芬兰赫尔辛基大学创作了Linux操作系统。它的出现打破了Windows操作系统一统天下的局面。

    Linux是一套免费使用和自由传播的Unix操作系统,是一个基于POSIXUNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持3264硬件。Linux继承了Unix网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    严格来讲Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

     主要特征

    1.多任务。该操作系统可同时执行多道程序

    2.多用户。多个使用者可同时在相同机器上操作(通过终端或虚拟控制台)。

    3.多平台。该操作系统可在不同的CPU上执行,不只是Intel CPU上。

    4.多处理器。

    5.对应用程序使用的内存进行保护。

    6.“按需取盘”。在Linux操作系统下,任何一个执行文件在执行时,只有那些确实被用到的代码段才会被系统读取到内存中,,这样节约了大量的读取磁盘时间,也加快了执行速度。

    7.共享内存页面。

    8.应用程序及硬盘Cache使用统一的内存池。

    9.具有动态链接库(Dynamic Linked Library   DLL)以及静态链接库。

    10.可做内存现场保存(Core Dumps)以便于事后的分析。

    11.所有的原始程序源代码都可以得到,包括整个核心及所有的驱动程序开发工具及所有应用程序。

    12.支持伪终端设备。

    13.支持数字协处理器387的软件模拟。

    14.支持数种普通的文件系统。

    15.强大的网络功能。


    Linux操作系统的组成                                                                                                                                                 Linux操作系统的内核



    展开全文
  • 计算机操作系统是计算机专业必修的专业基础课程,是考研的必考科目。它的特点是概念多、较抽象和涉及面广,所以无论是大学学习还是考研,很多同学都把它当做一块硬骨头,其实只要我们掌握正确的学习方法,操作系统...
  • 计算机网络 基础 Q:五层协议的体系结构分别是什么?...应用层不仅要提供应用进程所需要的信息交换和远地操作,还要作为互相作用的应用进程的用户代理(user agent); 运输层任务是负责主机中两个进程间...

    计算机网络
     

    基础

    Q:五层协议的体系结构分别是什么?每一层都有哪些协议?

    https://blog.csdn.net/cainv89/article/details/46885197

    应用层,应用层确定进程之间通信的性质以满足用户的需要。应用层不仅要提供应用进程所需要的信息交换和远地操作,还要作为互相作用的应用进程的用户代理(user agent);

    运输层任务是负责主机中两个进程间的通信;

    网络层网络层负责的是分组选择合适的路由;

    数据链路层数据链路层的任务:将在网络层交下来的数据报组装成帧(frame),两个相邻结点间的链路实现帧的传输;

    物理层物理层的任务:透明地传输比特流。 


    Q:为何有MAC地址还要IP地址?

    http://blog.sciencenet.cn/blog-411071-1037673.html

    基本上一个观点就是一个是物理地址,一个是逻辑地址。

    假设两点在一个网络内。在这种情况下,只需要MAC地址就可以了。例如通过交换机将多台电脑组成一个网络。

     然而,如果两点不在一个网络内。这时就需要IP地址了。因为IP地址含有两个部分,一个是网络地址,一个是主机地址。因此,通过对方的IP地址,是可以判断出对方是否和本机在一个网络内。如果在一个网络内,如上所述,只需要知道对方的MAC地址即可通信。

    如果不在一个网络内,本机的网络层就认为数据应该发送给网关。道理是显然的,如果不在一个网络内,首先得把数据发送出网络才可以。如何发出网络,当然是发给网关,因为网关就相当于网络的门卫。要想把数据发给网关,同样需要知道网关的MAC地址,如何知道网关的MAC地址呢?这就涉及到ARP协议。

    电脑缓存里有一张ARP表,该表主要有两列:一列是IP地址,另外一列是MAC地址。这张表不是天生就有的,是随着网卡收到网络中的各种通信数据,不断学习增加的。

    话说回来,如果ARP表中有网关IP地址对应的MAC地址,则问题就转化为网内数据发送,上面已经讲的很清楚了。如果ARP表中没有网关IP地址对应的MAC地址,则启动ARP协议,即向网内广播,询问该IP地址的MAC地址。广播询问的结果是网关收到广播后,发现是问自己的MAC地址,所以就回复询问方自己的MAC地址。然后数据发给网关的问题,也转化为网内数据发送。

     

    TCP

    Q:TCP和UDP的区别?

    https://blog.csdn.net/xiaobangkuaipao/article/details/76793702

    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

    Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

    3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

    4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

    5、TCP对系统资源要求较多,UDP对系统资源要求较少。


    Q:拥塞控制和流量控制都是什么,两者的区别?

    https://blog.csdn.net/ailunlee/article/details/53716367

    流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。 
    拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。


    Q:谈谈TCP为什么要三次握手?为什么要四次挥手?

    https://blog.csdn.net/zhaobudaofangxia/article/details/55260259

    https://blog.csdn.net/qq_33982721/article/details/78493967

    三次握手:

    第一次。A跟B说,我要建立连接了。
    第二次。B跟A说,OK,那我也建立连接。
    第三次。A跟B说,嗯,我知道了。
    四次挥手:

    第一次。A跟B说,我要断开连接了。
    第二次。B跟A说,好的,我知道了,我不再接收你的信息了。
    第三次。B跟A说,我传给你的信息传完了,你可以关闭连接了。
    第四次。A跟B说,好的,我关闭连接了。
     

    Q:播放视频用TCP还是UDP?为什么?

    TCP 和 UDP 是质量和实时性的权衡。
    拿视频网站来说,你完全可以缓冲 20s 再播放,不会带来什么影响,但如果画面有马赛克之类的东西出现肯定是不好的,所以用 TCP。
    而对于视频聊天,如果缓冲 5s,相信整个聊天已经没法愉快的进行了,而这时出现一些画面质量的损失也可以被接受,所以用 UDP。

     

    HTTP

    Q:HTTP报文格式?

    https://blog.csdn.net/holmofy/article/details/68492045


    Q:了解哪些响应状态码?

    https://blog.csdn.net/oops_qu/article/details/75675702

    http状态返回代码 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。

    http状态返回代码 2xx (成功):表示成功处理了请求的状态代码。

    http状态返回代码 3xx (重定向):表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

    http状态返回代码 4xx(请求错误):这些状态代码表示请求可能出错,妨碍了服务器的处理。

    http状态返回代码 5xx(服务器错误):这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。


    Q:get和post的区别?

    https://www.cnblogs.com/huaxingtianxia/p/5895236.html

    GET在浏览器回退时是无害的,而POST会再次提交请求。
    GET产生的URL地址可以被Bookmark,而POST不可以。
    GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    GET请求只能进行url编码,而POST支持多种编码方式。
    GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    GET请求在URL中传送的参数是有长度限制的,而POST么有。
    对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
    GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    GET参数通过URL传递,POST放在Request body中。
    GET和POST还有一个重大区别

    简单的说:

    GET产生一个TCP数据包;POST产生两个TCP数据包。

    长的说:

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

    因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

    1. GET与POST都有自己的语义,不能随便混用。

    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。


    Q:Http1.0、Http1.1、Http2.0的区别?

    https://blog.csdn.net/linsongbin1/article/details/54980801/


    Q:HTTP和TCP的区别?

      实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,它只是提供了一个针对TCP或者UDP编程的接口。


    Q:HTTP和HTTPS的区别?

    https://www.cnblogs.com/wqhwe/p/5407468.html

    HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

    HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

    HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。


    Q:HTTP和Socket的区别?

    https://blog.csdn.net/w369033345/article/details/72779553

    https://blog.csdn.net/w369033345/article/details/72779553

    http 为短连接:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接,因此为短连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。

    Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速网络,该节点处于活跃状态。


    Q:在地址栏打入http://www.baidu.com会发生什么?

    当输入www.baidu.com时,计算机会请求DNS服务器,进行域名转换,得到服务器IP地址,同时对服务器发出请求,服务器响应请求,客户端浏览器发起一个HTTP会话到IP地址,然后通过tcp进行封装数据包,输入到网络层

     

    Q:长链接与短连接?

    https://www.cnblogs.com/gotodsp/p/6366163.html

     

    操作系统

    Q:操作系统中进程和线程的区别?

    进程是程序执行的一个实体,线程是CPU调度的最小单位

    图示


    Q:死锁的产生和避免?

    https://www.cnblogs.com/fangrong/p/5271724.html

    死锁的四个必要条件:
    (1)互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
    (2)请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
    (3)非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
    (4)循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

     死锁避免(deadlock avoidence)是在系统运行过程中注意避免死锁的发生。这就要求每当申请一个资源时,系统都应根据一定的算法判断是否认可这次申请,使得在今后一段时间内系统不会出现死锁。这面方最著名的算法首推Dijkstra[1965]提出的银行家(banker)算法。

     

    数据库

    Q:数据库中的事务了解吗?事务的四大特性?

    数据库事务是数据库运行中的逻辑工作单位,单个逻辑工作单元所执行的一系列操作,要么都执行,要么都不执行。例如银行取款事务分为2个步骤(1)存折减款(2)提取现金,2个步骤必须同时完成或者都不完成。

    数据库事务的四大特性(ACID):

    (1) 原子性(Atomicity):
         事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
    (2)一致性(Consistency) :
        事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
    (3)分离性(Isolation):
       分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
    (4)持久性(Durability):
       持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。


    Q:如何理解数据库的范式?

    https://blog.csdn.net/zymx14/article/details/69789326

    第一范式(1NF):确保每一列的原子性

    如果每一列都是不可再分的最小数据单元,则满足第一范式。

    第二范式:非键字段必须依赖于键字段

    如果一个关系满足1NF,并且除了主键以外的其它列,都依赖与该主键,则满足二范式(2NF),第二范式要求每个表只描述一件事。

    第三范式:在1NF基础上,除了主键以外的其它列都不传递依赖于主键列,或者说: 任何非主属性不依赖于其它非主属性

    (在2NF基础上消除传递依赖)

     

    数据结构与算法

    Q:怎么理解数据结构?

    带有机构的数据元素的集合


    Q:什么是斐波那契数列?

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)


    Q:迭代和递归的特点,并比较优缺点

    https://blog.csdn.net/laoyang360/article/details/7855860

     


    Q:了解哪些查找算法,时间复杂度都是多少?

    https://blog.csdn.net/qq_23217629/article/details/52517741


    Q:了解哪些排序算法,并比较一下,以及适用场景

    https://blog.csdn.net/mountain_hua/article/details/81107024

     


    Q:快排的基本思路是什么?最差的时间复杂度是多少?如何优化?

    (升序)以某个记录的关键字为划分元,将整个数据分为两组,左边的数据小于等于划分元,右边的数据大于等于划分元。对左右两组数据,再各自选择一个划分元,将两组数据划分为更小的序列,这样一直进行下去,直到整个序列有序。

    public static void quickSort(int[] array, int left, int right) {
        if (left < right) {
            int pivot = array[left];
            int low = left;
            int high = right;
            while (low < high) {
                while (low < high && array[high] >= pivot) {
                    high--;
                }
                array[low] = array[high];
                while (low < high && array[low] <= pivot) {
                    low++;
                }
                array[high] = array[low];
            }
            array[low] = pivot;
            quickSort(array, left, low - 1);
            quickSort(array, low + 1, right);
        }
    }


    最差时间复杂度即是但数据有序的时候,这时候退化为冒泡排序,时间复杂度为O(n2)

    优化:https://blog.csdn.net/sinat_28676875/article/details/69053449

     

    Q:冒泡排序如何优化?

    public static void bubbleSort(int[] array) {
        int len = array.length;
        boolean flag = true;
        while (flag) {
            flag = false;
            for (int i = 0; i < len - 1; i++) {
                if (array[i] > array[i + 1]) {
                    int temp = array[i + 1];
                    array[i + 1] = array[j];
                    array[i] = temp;
                    flag = true;
                }
            }
            len--;
        }
    }


    存在这样一一种情况,冒泡过程中,后面的若干记录没有发生交换,这时候再继续进行冒泡就显得多此一举了,那么我们只需要记录没有发生交换的位置,对这个位置之后的数据不进行冒泡处理,只对这个位置之前的数据进行冒泡处理,提升算法的效率。

    优化后的冒泡排序:

    void Bubble_Modified_Sort(int R[],int n){
        int i=n;
        int j;
        int LastExchangeIndex;
        while(i>1){
            LastExchangeIndex=1;
            for(j=0,j<i,j++){
                if(R[j]>R[j+1]){
                    int temp=R[j+1];
                    R[j+1]=R[j];
                    R[j]=temp;
                    LastExchangeIndex=j;
                }    //end if
            }    //end for
            i=LastExchangeIndex;
        }    //end while
    }

     

    Q:AVL树插入或删除一个节点的过程是怎样的?

    https://blog.csdn.net/Ivan_zgj/article/details/51495926

    https://blog.csdn.net/friendbkf/article/details/50160141


    Q:什么是红黑树?

    红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。

    它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。

    红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。

    它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。

    https://blog.csdn.net/eric491179912/article/details/6179908

    Q:100盏灯问题
    Q:老鼠和毒药问题,加个条件,必须要求第二天出结果
    Q:海量数据问题
    Q:(手写算法)二分查找
    Q:(手写算法)反转链表
    Q:(手写算法)用两个栈实现队列
    Q:(手写算法)多线程轮流打印问题
    Q:(手写算法)如何判断一个链有环/两条链交叉
    Q:(手写算法)快速从一组无序数中找到第k大的数/前k个大的数
    Q:(手写算法)最长(不)重复子串

    展开全文
  • 一、操作系统 1.请说一下进程和线程的概念及作用;进程间通信的方式;怎么同步? (1)概念及作用 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; (所谓并发,...
  • 数据库 参考MySQL索引背后的数据结构及算法原理 B-TREE 和 B+-TREE 区别 B-TREE:所有节点都存储数据,即所有节点的数据结构相同。...B+-TREE:只有叶节点存储数据,其他节点存储键值。...建表时若不指定主键,...
  • 操作系统,计算机网络,编译原理

    千次阅读 2017-07-04 19:43:17
    (数据链路层)CSMA/CD协议
  • 操作系统&计算机网络&数据库

    千次阅读 2020-09-17 15:03:27
    计算机网络 TCP/IP五层模型(只需要背传输层) ...在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。 2 传输层(TC...
  • 操作系统原理总结

    万次阅读 多人点赞 2018-07-10 23:15:47
    转载:... 操作系统的资源管理技术资源管理解决物理资源数量不足和合理分配资源这两个问题。 操作系统虚拟机为用户提供了一种简单、清晰、易用、高效的计算机模型。虚拟机的每种资源...
  • 操作系统L1 什么是操作系统 参考材料: 中国MOOC课程 L1 什么是操作系统 CPU告诉内存,地址为300的acsii码,通过总线控制器,通过PCI总线发送到图形控制器写入到显存地址。实际上就用了printf(“Hello!”),...
  • 操作系统——PV操作

    万次阅读 2018-10-30 10:58:57
    PV操作概念:操作系统中的一种同步机制,实现对于并发进程中临界区的管理。 并发进程分为两种: ①无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作。 ②有交互的并发进程:多个进程...
  • 操作系统知识点整理(完整版)

    万次阅读 多人点赞 2017-12-26 22:39:25
    第一章 操作系统概述 1)一个完整的计算机系统是由硬件系统和软件系统两大部分组成 2)计算机软件是指程序和与程序相关的文档的集合 3)按功能可把软件分为“系统软件”和“应用软件”两部分 系统软件:操作系统...
  • 如何安装Windows操作系统

    万次阅读 多人点赞 2020-04-28 17:34:14
    博主喜欢以最原始最直接的方式安装系统,并且不喜欢安装Ghost、精简、修改等等各种操作系统,在这里分享一个一直在用,看起来麻烦博主却觉得最适合个人安装操作系统的方式,请往下看,欢迎指正交流分享 一、关于...
  • 燕山大学操作系统课程设计计划书

    万次阅读 2019-01-07 09:15:37
    燕山大学操作系统课程设计计划书 燕山大学课程设计计划书 课程设计名称:操作系统 题目:多道程序缓冲区协同操作 年级:2016级 开发小组名称:WWW. 小组负责人: 课题组成员: 姓名 学号 班级 分工 签字 互斥与同步...
  • 深度操作系统Deepin15安装图文教程

    万次阅读 2019-03-06 22:32:02
    深度操作系统15是由武汉深之度科技有限公司研发最新推出的桌面版V15操作系统。全新风格设计与系统构架的全面提升,为你带来简洁、优美的良好体验!此外,国际化进展迅速,全新镜像源加速功能与多达30种多国语言支持,...
  • 构筑基于物联网操作系统的物联网生态环境

    万次阅读 多人点赞 2014-04-08 21:01:36
    最近跟物联网行业和移动互联网行业的一些资深从业人员做了深入交流,就物联网操作系统的概念和必要性、定位等进行了充分深入的沟通。首先说明的是,物联网操作系统的概念被广泛认同。同时,对物联网操作系统在整个...
  • 计算机操作系统核心知识点总结&面试笔试要点

    万次阅读 多人点赞 2020-04-19 17:41:01
    操作系统之基础篇 一、 操作系统概述  1. 操作系统的演进   无操作系统:人工操作,用户独占,CPU等待人工操作,资源利用率很低。   批处理系统:批量输入任务,无需等待人工操作,资源利用率提升,提出多道...
  • 操作系统与多核处理器

    万次阅读 2017-11-10 18:00:04
    这篇文章解答了我心中的疑问,那就是操作系统会自动调度cpu资源来处理多进程,多线程的并发。    早在上世纪90年代末,就有众多业界人士呼吁用CMP(单芯片多处理器)技术来替代复杂性较高的单线程CPU。IBM、惠普、...
1 2 3 4 5 ... 20
收藏数 4,866,916
精华内容 1,946,766
关键字:

操作系统