面试/笔试题集锦——操作系统篇(持续更新中)

文章目录

    • 前言
    • 磁盘调度算法
    • 进程和线程的区别
    • 进程通信的几种方式

前言

最近加入了春招的行列中,有好多东西需要学习or复习,在这里将持续整理学习、笔试和面试碰到的一些问题,希望能在巩固知识、加深印象的同时,也给大家的招聘之路带来便利,如果大家遇到了其他的经典问题,但是这里没有收录,希望大家能够通过评论等方式发给我,我会尽快的整理到集锦中。最后希望大家都能如愿找到满意的工作。by CrazyOnes


磁盘调度算法

磁盘调度算法是在多道程序设计的计算机系统中,各个程序可能会提出不同的对磁盘的读/写请求,一般情况下,进程发送请求的速度要比磁盘的响应速度要快,此时如何处理在等待队列中的请求则会显得尤其重要。

FCFS: 先来先服务算法,无论磁头处于什么位置,都是按照请求的先后顺序依次处理,也就类似与队列的先进先出。这个算法的优点是算法的实现非常简单,缺点也非常的明显,这样平均寻道长度就会大大增加。
SSTF: 最短寻道时间算法,算法的思想其实和“贪心算法”是一样的。已知磁头的初始位置,最先被处理的请求就是距离磁头最近的请求,处理完成后再处理距离当前位置最近的请求,知道所有请求处理完成。算法大大缩短了平均寻道长度,但是也带了另一个问题,就是离初始位置很远的请求会一直得不到处理,从而产生“饥饿”现象。
SCAN: 扫描算法,又叫做电梯算法,和电梯处理请求的方式是相同的,在给定磁头初始位置和移动方向时,优先处理同方向距离最近的请求,直到全部处理完成后,调转方向,按照由近及远的顺序处理反方向的请求。优点:可以避免了“饥饿”现象并保证了良好的寻道性能;缺点:不利于远离磁头方向一端的访问。
CSCAN: 循环扫描算法,是扫描算法的改进;开始时与SCAN算法的处理方式相同,优先处理同方向距离最近的请求,逐个处理完成后,不立即朝反方向扫描,而是到达距离当前磁头最远的位置(如果此时磁头由外向内到达最内层,则磁头立即到达最外层),仍朝同方向扫描。这样拥有SCAN算法优点的同时,又克服了它的缺点,达到了更好的性能。

进程和线程的区别

  • 进程是操作系统资源分配的最小单位,线程是CPU任务调度和执行的最小单位。
  • 他们是包含关系,进程中会有一个或多个线程。
  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此切换一个线程的花费资源比切换进程要小的多,同时创建线程的开销也比进程要小很多。
  • 线程之间的通信更加方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信则相对复杂一些。
  • (多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。)有待考证



进程通信的几种方式

  • 共享内存
  • 消息队列
  • 信号量
  • 管道(命名管道和无名管道)

你可能感兴趣的:(面试经验,操作系统)