计算机基础03 - 操作系统

1. 什么是操作系统?

(1)操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;

(2)操作系统本质上是运行在计算机上的软件程序;

(3)操作系统为用户提供一个与系统交互的操作界面;

(4)操作系统分为内核与外壳(可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。

        内核:负责管理系统的进程、设备驱动程序、文件和网络系统等等,决定着系统的性能和稳定性,是连接应用程序和硬件的桥梁。内核就是操作系统背后黑盒的核心。

 2. 什么是系统调用?

        首先了解用户态和核心态。CPU的两种工作状态 -- 用户态和核心态,也就是处理器的两种执行状态。

在一个系统中既有操作系统的程序,也有普通用户的程序。众多的指令中,有些指令只能由系统来使用,禁止用户程序去直接访问。为了保证操作系统和各个应用程序能够顺利运行,就必须对它们进行限制,否则的话就无法保证系统的安全性和稳定性。
所以根据运行程序对资源和机器指令的使用权限,把处理器设置为不同的状态。多数系统把处理器的工作状态分为用户态和核心态两种。

 (1)核心态:操作系统的管理程序运行时的状态。可以简单的理解为核心态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。

(2)用户态:用户程序运行时的状态,用户态运行的进程或程序可以直接读取程序的数据,不能直接使用系统资源,也不能改变CPU的工作状态。

在核心态下CPU可执行任何指令,在用户态下CPU只能执行非特权指令。

       当CPU处于核心态,可以随意进入用户态;而当CPU处于用户态时,如果要调用操作系统提供的核心态级别的子功能,该怎么办?这时就会用到系统调用

      也就是说,在运行的用户程序中,凡是与核心态级别的资源有关的操作(如文件管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。

系统调用按功能可以大致分为以下几类

  • 设备管理:完成设备的请求或释放,以及设备启动等功能。
  • 文件管理:完成文件的读、写、创建以及删除等功能。
  • 进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。
  • 进程通信:完成进程间的消息传递或信号传递等功能。
  • 内存管理:完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

        用户从用户态切换到核心态只有在系统调用和中断两种情况下发生,一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就必须通过软中断机制进入核心态。

2. 进程与线程的区别

       从JVM的角度阐述进程与线程的区别:系统运行一个程序就是一个进程从创建、运行到销毁的过程,是程序执行一次的过程。进程可以包含多个线程,多个线程共享进程的堆与方法区,而每个线程又有自己的程序计数器、本地方法栈、虚拟机栈。

      总结:进程是系统运行程序的最小单位,线程是CPU调度的最小单位。线程是进程划分成更小的运行单位,一个进程在其执行期间可以产生多个线程。线程与进程最大区别在于基本上各进程是独立的,而各线程不一定,因为同一进程中的线程很有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;进程相反。

3. 进程有哪几种状态?        

         一般把进程分为5种状态,这一点与线程很像:

(1)新建状态(new):进程正在被创建,尚未到就绪状态。

(2)就绪状态(Ready):进程已处于就绪状态,即进程获得了除了处理器以外的所有资源,一旦获得处理器资源(处理器分配的时间片)即可运行。

(3)运行状态(Running):进程正在处理器上运行。

(4)阻塞状态(Waiting):又称为等待状态,进程正在等待某一件事而停止运行,如等待某一资源、等待IO操作完成。即使处理器空闲,该进程也不能运行。

(5)结束状态(terminated):进程正在从系统中消失,可能是正常结束,也可能是其他原因导致进程结束。

进程的状态变迁:

   创建状态 -> 就绪状态:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态,这个过程是很快的;

   就绪态 -> 运行状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程;

   运行状态 -> 结束状态:当进程已经运行完成或出错时,会被操作系统作结束状态处理;

   运行状态 -> 就绪状态:处于运行状态的进程在运行过程中,由于分配给它的运行时间片用完,操作系统会把该进程变为就绪态,接着从就绪态选中另外一个进程运行;

   运行状态 -> 阻塞状态:当进程请求某个事件且必须等待时,例如请求 I/O 事件;

   阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;

进程的数据结构:进程控制块(PCB)。

进程的控制:创建、终止、阻塞、唤醒。

    01 创建进程:操作系统允许一个进程创建另一个进程,且允许子进程继承父进程所拥有的资源。

    02 终止进程:当子进程被终止时,其在父进程出继承的资源应当还给父进程。而当父进程被终止时,该父进程的子进程就变为孤儿进程,会被1号进程收养,并由1号进程对它们完成状态收集工作。

    03 阻塞进程:当进程需要等待某一事件完成时,它可以调用阻塞语句把自己阻塞。进程被阻塞等待,它只能由另一进程唤醒。

   04 唤醒进程

 4. 常见的进程间的通信方式(IPC)

(1)管道 / 匿名管道(Pipes):只允许单向通信,并且只能在具有亲缘关系的父子进程间或兄弟进程间使用;

(2)有名管道(Names Pipes):它允许无亲缘关系进程间的通信。有名管道严格遵循先进先出。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程的通信;

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

(4)消息队列(Message Queue):消息队列是消息的链表,具有特定的格式,存放在内核中并由消息队列标识符标识。消息队列克服了信号承载信息量少、管道只能承载无格式字节流以及缓冲区大小受限等缺点;

(5)信号量(Semaphores):是一个计数器,可以用来控制多个进程对共享资源的访问。这种通信方式主要用于解决与同步相关的问题并避免竞争条件;

(6)共享存储(Shared Memory):共享存储就是映射一段能被其他进程所访问的内存,这段共享内存由进程创建,但多个进程都可以访问。这种方式需要依靠某种同步操作,如互斥锁和信号量等。共享存储是最快的IPC(进程间的通信)方式;

(7)套接字(Sockets):主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看作是不同主机之间的进程进行双向通信的端点。简单地说,就是通信双方的一种约定,用套接字中的相关函数来完成通信过程。

5. 线程同步的方式

并发:在同一时间段中,多个线程都在执行。其中两种并发关系分别是同步和互斥。

      线程同步:多线程通过特定的设置(如互斥量、事件对象等)来控制线程之间的执行顺序。如:你说完,我再说。

      线程互斥:有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其他要使用该资源的线程必须等待。线程互斥可以看作是一种特殊的线程同步。

      线程同步是两个或多个共享资源的线程的并发执行。应该同步线程以避免关键的资源使用冲突。操作系统一般有下面4种线程同步的方式

(1)互斥量(Nutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如Java中的synchronized关键字和各种Lock都是这种机制。互斥量是内核对象。

(2)信号量(Semphares):它允许同一时刻多个线程访问同一资源,但需要控制同一时刻访问该资源的最大线程数量。信号量是内核对象。

(3)事件对象(Event):wait / notify,通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。事件对象是内核对象。

(4)临界区(Critical Section):通过对多线程的串行化来访问公共资源,适合控制数据访问。临界区不是内核对象,不是属于操作系统维护的,而是属于进程维护的。

    其中,临界区和互斥对象主要用于互斥控制,都具有拥有权的控制方法;而信号量和事件对象主要用于同步控制

6.进程的调度算法

       一旦操作系统把进程切换到运行状态,也就意味着该进程占用着 CPU 在执行,但是当操作系统把进程切换到其他状态时,那就不能在 CPU 中执行了,于是操作系统会选择下一个要运行的进程。选择一个进程运行这一功能是在操作系统中完成的,通常称为调度程序scheduler

       注意:这里的进程指只有主线程的进程,所以调度主线程就等于调度了整个进程。

(1)调度时机:在进程的生命周期中,当进程从一个运行状态到另一个状态的变化,就会触发一次调度。比如,以下状态的变化都会触发操作系统的调度:

  • 从就绪态 -> 运行态:当进程被创建时,会进入到就绪队列,操作系统会从就绪队列选择一个进程运行;
  • 从运行态 -> 阻塞态:当进程发生 I/O 事件而阻塞时,操作系统必须选择另外一个进程运行;
  • 从运行态 -> 结束态:当进程退出结束后,操作系统得从就绪队列选择另外一个进程运行;

      因为,这些状态变化的时候,操作系统需要考虑是否要让新的进程给 CPU 运行,或者是否让当前进程从 CPU 上退出来而换另一个进程运行。

(2)调度算法

    01 先到先服务(FCFS)调度算法:先来后到,每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。适合长作业。

    02 短作业优先(SJF)调度算法:优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。

    03 高响应比优先调度算法:主要是权衡了短作业和长作业。每次进行进程调度时,先计算「响应比优先级」,然后把「响应比优先级」最高的进程投入运行。计算公式如下,

    04 时间片轮转调度算法:每个进程被分配一个时间段,称为时间片(Quantum),即允许该进程在该时间段中运行。

    05 优先级调度算法:从就绪队列中选择最高优先级的进程进行运行。进程的优先级可以由操作系统按一定的原则赋予,也可以在操作系统外安排。

    06 多级反馈队列调度算法:是「时间片轮转算法」和「最高优先级算法」的综合和发展。【多级】表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。【反馈】表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列。

   

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值