b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

常见的操作系统面试问题

电脑杂谈  发布时间:2020-06-19 13:13:31  来源:网络整理

钳工操作试题_操作系统试题_会计电算化实务操作试题

进程同步的主要任务是协调多个相关进程的执行顺序,以便同时执行的进程可以有效地共享资源并相互协作,从而使程序的执行具有可再现性.

同步机制遵循的原则:

(1)允许空闲;

(2)忙时等待(确保对关键部分的互斥访问);

(3)有限的等待时间(有限的时间代表避免死亡的有限时间,等等);

(4)赋予等待的权利(当进程无法进入其自己的关键部分时,应释放处理器以避免忙碌等).

进程通信是指进程之间的信息交换(少量信息表示状态或值,而更多信息则表示数万个字节). 因此,由于交换的信息量少,具有信号量的进程之间的互斥和同步归因于底层通信.

所谓的高级过程通信是指一种通信方法,其中用户可以使用由操作系统提供的一组通信命令来传输大量数据. 操作系统隐藏了进程通信的实现细节. 换句话说,通信过程对用户是透明的.

高级通信机制可以分为三大类:

(1)共享内存系统(共享存储区域划分为内存);实际操作对应于“剪贴板”(剪贴板实际上是系统维护和管理的内存区域),例如以下示例: 在单词过程中按ctrl + c,在ppt过程中按ctrl + v,以完成之间的通信文字处理和ppt处理. 复制时将数据放入剪贴板,粘贴时从剪贴板中获取数据. 然后显示在ppt窗口中.

(2)消息传递系统(进程之间的数据交换以消息为单位. 在当今最流行的微内核操作系统中,微内核与服务器之间的通信无一例外地使用消息. 传递机制. 应用示例: MailSlot被设计基于广播通信系统,它使用无连接且不可靠的数据传输Mailslot是一种单向通信机制,创建Mailslot的服务器进程读取数据,打开Maillot的客户端进程写入数据.

(3)管道通信系统(管道: 一个共享文件(管道文件,类似于一个先进先出队列,由一个进程写入,由另一个进程读取),该文件连接读写进程以实现相互之间的通信在实际操作中,管道分为: 匿名管道和命名管道;匿名管道是在父进程和子进程之间传输数据的无名单向管道;匿名管道只能实现以下两个进程之间的通信: 命名管道不仅可以实现本机上两个进程之间的通信,而且还可以实现整个网络上两个进程之间的通信.

注1: 未命名管道只能实现父子进程或同级进程之间的通信,而命名管道(FIFO)可以实现两个不相关进程之间的通信.

注2: 当使用FIFO允许服务器与多个客户端进行通信时,每个客户端在向服务器发送信息之前会建立自己的读取管道,或者允许服务器在接收数据后建立管道. 使用客户端的进程ID(pid)作为管道名称是一种常见方法. 客户端可以先将其进程号告诉服务器,然后在以其进程号命名的管道中读取答复.

对于单核单线程CPU,一次只能执行一条CPU指令. 上下文切换(Context Switch)是一种将CPU资源从一个进程分配到另一个进程的机制. 从用户的角度来看,计算机可以并行运行多个进程,这正是通过快速上下文切换来操作系统的结果. 在切换过程中,操作系统需要首先存储当前进程的状态(包括内存空间的指针,当前执行的指令等),然后读取下一个进程的状态,然后执行过程.

进程与线程之间的关系

(1)一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程. 线程是操作系统可以识别的最小执行和调度单元.

(2)资源分配给进程,并且同一进程的所有线程共享该进程的所有资源. 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量)和扩展段(堆存储). 但是,每个线程都有自己的堆栈段,这也称为运行期,用于存储所有局部变量和临时变量.

(3)处理器分为多个线程,即该线程实际上在处理器上运行.

(4)程执行过程中,需要协作同步. 不同进程的线程应使用消息通信来实现同步.

进程和线程之间的区别?

(1)进程具有自己的独立地址空间,线程没有

(2)进程是资源分配的最小单位,线程是CPU调度的最小单位

(3)进程和线程的通信方法不同(线程之间的通信更为方便. 同一进程中的线程共享数据(例如全局变量,静态变量),通过这些数据进行通信不仅快速便捷,而且当然如何处理好,这些访问的同步和互斥是编写多线程程序的难点. 进程之间的通信只能通过通信过程来进行. )

(4)进程上下文切换开销大而线程开销小

(5)如果一个进程挂起,则不会影响其他进程,如果一个线程挂起,则将影响其他线程

(6)进程操作的一般开销比较大,线程的开销很小

为什么进程上下文切换比线程上下文切换更昂贵?

会计电算化实务操作试题_钳工操作试题_操作系统试题

过程切换分为两个步骤:

1. 切换页面目录以使用新的地址空间

2. 切换内核堆栈和硬件上下文

对于Linux,线程和进程之间的最大区别是地址空间. 对于线程切换,没有必要第一步,而第二步是进程和线程切换.

切换的性能成本:

1. 线程上下文切换和进程切换之间的主要区别在于,用于线程切换的虚拟内存空间仍然相同,但是进程切换不同. 这两个上下文切换的处理是通过操作系统内核完成的. 与此核心切换过程相关的最重大的性能损失是切换出寄存器的内容.

2. 另一个隐藏的损失是上下文切换将干扰处理器的缓存机制. 简而言之,一旦上下文切换,处理器中的所有缓存内存地址都会立即失效. 另一个重大区别是,当您更改虚拟内存空间时,将完全刷新已处理的页表缓冲区(处理器的转换后备缓冲区(TLB))或等效的Shenma内容,这将导致一段时间内的内存访问效率很低. 但是,程切换期间不会发生此问题.

要知道的是: 进程和线程之间的区别

链接:

首先,是一个概述: 进程和线程是对时间段的描述,这是对CPU工作时间段的描述.

背景详细说明如下:

CPU + RAM +各种资源(例如图形卡,CD-ROM驱动器,键盘,GPS和其他设备)构成了我们的计算机,但是计算机的运行实际上是CPU与相关寄存器和RAM之间的事情.

最基本的事实之一: CPU速度太快,太快,太快,寄存器只能追上他,而RAM和其他挂在每条总线上的设备是完全不能接受的. 什么时候执行多个任务呢?轮流?还是谁的优先级更高?总之,不管采用哪种策略,CPU似乎都是轮流使用.

必须知道的事实: 执行一段程序代码以实现功能的过程. 当获取到CPU时,相关资源也必须放置到位,即图形卡,GPS等必须放置到位,然后CPU开始执行. 这里除了CPU之外的所有东西都构成了该程序的执行环境,这就是我们定义的程序上下文. 当执行该程序或分配给他的CPU执行时间用尽时,它将被关闭并等待下一个CPU运气. 退出程序的最后一步是保存程序上下文,因为这是下一次他很幸运时必须由CPU进行保存的操作环境.

它们是串联连接的: 如前所述,在CPU的视图中,所有任务都依次轮流执行. 具体的轮换方法是: 首先加载程序A的上下文,然后开始执行A,然后保存程序A的上下文,在要执行的下一个程序B的程序上下文中调用,然后开始执行B,保存程序B的上下文. .

==========重要的事情已经出现========

进程和线程就是出于这种背景. 这两个名词只是对相应CPU时间段的描述. 名词就是这样的功能.

什么是线程?

该进程的粒度太大,每次必须进行上下传输,保存和传输. 如果将流程与计算机上运行的软件进行比较,则软件的执行不能是逻辑上的执行. 必须有多个分支和多个程序段,就像程序A的实现一样,它实际上分为a和b. ,C和其他块组合在一起. 然后,这里的具体实现可能会变成:

程序A获取CPU =” CPU加载上下文,开始执行程序A的a段,然后执行A的b段,然后执行A的c段,最后CPU保存A的上下文.

在这里,a,b和c的执行共享A的上下文,并且CPU在执行期间不切换上下文. 在这里,a,b和c是线程,这意味着线程共享进程的上下文,并且具有较小的CPU时间周期.

到本文末尾,另一个摘要:

进程和线程都是时间段的描述,是CPU工作时间段的描述,但是粒子大小不同.

线程可以分为两类:

实际上,在现代操作系统中,多线程经常结合使用,即线程创建完全在用户空间中完成,并且应用程序中的多个用户级线程被映射到某些内核级线程. 这等同于妥协.

时间表类型

非抢占式调度和抢占式调度

调度策略设计

CPU任务可以分为交互式任务和批处理任务. 调度的最终目标是合理使用CPU,以使交互式任务的响应时间尽可能短,用户不会感到延迟,同时使批处理任务周转. 减少用户等待的时间.

会计电算化实务操作试题_钳工操作试题_操作系统试题

计划算法:

先入先出(FIFO)或先到先得(FCFS)先到先得

最短的工作优先(SJF)

最短的剩余工作优先(SRJF)

优先级安排

循环(RR)循环调度算法

多级队列调度

多级反馈队列

多级反馈队列调度算法的描述:

clipboard.png

一个简单的例子

假设系统中有3个反馈队列Q1,Q2,Q3,并且时间片分别为2、4和8. 现在有3个作业J1,J2,J3分别在时间0、1、3到达. 他们需要的CPU时间分别是3、2、1个时间片.

定义: 如果一组进程中的每个进程都在等待只能由该组进程中的其他进程触发的事件,则该组进程将处于死锁状态. 或在两个或多个并发进程中,如果每个进程都拥有某个资源并等待其他进程释放它或它们当前持有的资源,则它们不能继续前进而不更改此状态. 据说这组过程有一个死锁. 用外行的话来说,这是两个或多个进程被无限期地阻塞,互相等待的状态.

死锁的必要条件:

如何处理死锁问题:

1. 预处理: 条件编译,头文件包含,宏替换处理和.i文件的生成.

2. 编译: 将预处理后的文件转换为汇编语言并生成.s文件

3. 程序集: 程序集成为生成.o文件的目标代码(机器代码)

4. 链接: 连接目标代码以生成可执行程序

链接

首先介绍“池技术”的概念. 池化技术是: 预先节省大量资源,以防意外需求和重用. 池技术被广泛使用,例如内存池,线程池,连接池等. 对于与内存池相关的内容,建议查看开放源Web服务器(如Apache和Nginx)的内存池实现.

因为在实际应用中,分配内存,创建进程和线程都是通过一些系统调用来设计的. 系统调用需要使程序从用户模式切换到内核模式,这是非常耗时的操作. 因此,当程序需要频繁释放内存应用程序,进程,线程创建和销毁以及其他操作时,通常使用内存池,进程池和线程池技术来提高程序的性能.

线程池: 线程池的原理非常简单,类似于操作系统中缓冲区的概念,其过程如下: 首先启动多个线程,并让这些线程处于睡眠状态,当您需要打开线程时,它将唤醒线程池中的休眠线程,并让其执行特定的工作. 工作完成后,线程处于睡眠状态,而不是破坏线程.

进程池与线程池相同.

内存池: 内存池是指程序预先从操作系统申请足够大的内存. 之后,当程序需要申请内存时,不直接应用于操作系统,而是直接从内存池中获取;相同的原因程序释放内存时,它实际上并不将内存返回给操作系统,而是返回到内存池. 程序退出时(或在特定时间),内存池实际上将释放先前请求的内存.

静态库

动态库

钳工操作试题_会计电算化实务操作试题_操作系统试题

差异:

使用静态库时,静态链接库必须参与编译. 在生成执行文件之前的链接过程中,静态链接库的所有指令都应直接链接到可执行文件中. 动态库为进程提供了一种调用函数的方法,这些函数不属于其可执行代码. 该函数的可执行代码位于一个.dll文件中,该文件包含一个或多个与使用它们的进程分开编译,链接和存储的函数. 静态库不能包含其他动态库或静态库,并且动态库也可以包含其他动态库或静态库. 编译静态库时,会将库函数加载到程序中,并且必须在运行时加载动态库函数,因此使用静态库的速度更快.

链接

定义: 它具有请求调用功能和替换功能,可以从逻辑上扩展存储容量以获得存储系统. 它的逻辑容量由内存和外部存储的总和决定.

与传统存储相比,虚拟存储具有以下三个主要特征:

有两种实现虚拟内存的方法:

操作系统根据页面管理内存,并且仅在需要时才将过程的相应部分转移到内存中. 产生页面错误时,需要选择要写入的页面. 如果要换出的页面已在内存中修改为“脏”页面,则需要先将其写入磁盘. 页面替换算法是选择最合适的页面,以使替换效率最高. 页面替换算法很多,简要介绍了其中的一些,主要关注更重要的LRU及其实现算法.

首先,最佳页面替换算法

在理想状态下,我们在页面上标记并选择一个页面,该页面在距离最远时会再次使用. 当然,这种算法无法实现,因为不确定何时使用页面.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-250936-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 周悼王
      周悼王

      这回得一起收拾美狗们

    热点图片
    拼命载入中...