首页 > 编程语言 >系统编程常见概念

系统编程常见概念

时间:2024-06-04 15:24:24浏览次数:21  
标签:常见 正确 编程 阻塞 概念 线程 信号 进程 函数

1.以下说法错误的是:

A.无名管道的描述符只能通过继承的方式获得,因此没有亲缘关系的进程间无法使用无名管道通信。

B.有名管道可以被多个进程打开,而且同时写入数据时数据不会被破坏。

C.无名管道和有名管道都只存在于进程上下文之中,退出了进程管道即消失。

D.管道内部的数据如果填满了缓冲区,继续写入数据会导致阻塞。

A正确。无名管道是用于有亲缘关系的进程之间的通信(通常是父子进程之间),因为管道描述符是通过fork系统 调用继承的。

B正确。有名管道(FIFO)是系统中的一个特殊文件,可以被多个进程打开进行读写。系统会保证写操作的原子 性,避免数据混乱。

C错误。无名管道确实只存在于进程上下文中,但有名管道(FIFO)存在于文件系统中,不依赖于进程的生存周 期,即使所有进程都退出,有名管道依然存在,直到被显式删除。

D正确。当管道的缓冲区被填满时,写入操作会被阻塞,直到有数据被读出或缓冲区有空间。

2.以下叙述正确的是:

A.一个进程可以同时响应多个相同的信号。

B.信号在响应的过程中可以响应别的信号。

C.对一个信号设置了阻塞,就意味着将来收到此信号会将其丢弃。

D.可以给一个进程发送信号,但无法给一个进程组发送信号。

E.信号响应函数跟主函数的执行是串行的,因此不需要保护该函数内的共享资源。

A错误。对于大多数信号,一个进程在某一时刻只能处理一个该类型的信号,未处理的相同信号会被合并为一个信 号,不会同时存在多个相同信号在信号队列中。

B正确。信号处理函数在处理一个信号时,如果不屏蔽其他信号,那么其他信号仍然可以中断当前的信号处理函 数,从而触发对这些新信号的处理。

C错误。阻塞一个信号只是让该信号在阻塞期间不被处理,并不会丢弃。当解除阻塞时,阻塞期间收到的信号会被 处理。

D错误。可以通过kill函数发送信号给一个进程组。使用负的进程组ID可以给整个进程组发送信号。

E错误。信号处理函数的执行是异步的,与主函数执行是并行的。因为信号处理函数可能会在任何时候中断主函数 的执行,因此必须保护共享资源(例如使用信号屏蔽或其他同步机制)以避免竞态条件。

3.关于共享内存,叙述有误的是:

A.共享内存之一块直接暴露在多个进程中的内存,因此必须使用同步互斥机制来加以保护。

B.共享内存是诸多IPC中效率最高的一种,适合于传输大量数据。

C.在共享内存中定义的变量别的进程可以访问,但如果加以修改则会自动复制一个拷贝,不影响原数据。

D.进程在使用共享内存前,必须先将其映射到自己的虚拟空间来。

A正确。因为共享内存可以同时被多个进程访问,所以需要同步和互斥机制(例如信号量、互斥锁)来防止数据竞 争和不一致性。

B正确。共享内存不涉及内核态与用户态之间的数据复制,因此在需要高效地传输大量数据时非常合适。

C错误。共享内存是直接共享的,所有进程都能看到并修改同一块内存,修改会直接影响到原数据,不会自动复制 一个拷贝。

D正确。进程需要通过系统调用将共享内存段映射到自己的地址空间才能使用。

4.关于进程的状态,以下说法错误的是:

A.新建的进程处于TASK_RUNNING状态,可以随时被调度器调度。

B.正常退出的进程将会进入EXIT_ZOMBIE状态,异常被杀死的进程则直接进入EXIT_DEAD状态。

C.进程可以调用sleep()来强迫自己进入TASK_INTERRUPIBLE状态。

D.分时系统的提出的根本原因是CPU资源稀缺。

E.处于TASK_STOPPED状态的进程收到SIGCONT后将进入睡眠态,等待唤醒之后重新调度。

A正确。新建的进程在被创建后确实是处于TASK_RUNNING状态,表示它已经准备好被调度执行。

B错误。不论进程是正常退出还是异常被杀死,都会首先进入EXIT_ZOMBIE状态,只有当父进程通过wait系统调用 回收它的资源后,进程才会进入EXIT_DEAD状态。

C正确。调用sleep()函数会使进程进入TASK_INTERRUPIBLE状态,在指定的时间到达或接收到信号时被唤醒。

D正确。分时系统是为了更有效地利用CPU资源,使多个用户或任务能共享CPU时间,提高系统效率。

E错误。处于TASK_STOPPED状态的进程在收到SIGCONT信号后,会从TASK_STOPPED状态变为TASK_RUNNING状 态,等待调度器调度执行。

5.关于异步信号通信机制,以下说法错误的是:

A.signal()用以给某信号指定一个关联响应函数,kill()用以给某进程发送某一个信号。

B.如果进程在注册某信号处理函数之前就收到该信号,那么该信号将会被保留起来直至有了其响应函数为止。

C.信号的标记从1号到64号,标号越小的信号优先级越高,高优先级信号的响应过程将不会被低优先级信号中断。

D.一个进程可以设置阻塞信号掩码,但这些阻塞掩码将不会继承给其子进程。

E.如果一个进程内有多条线程,那么当该进程收到一个信号的时候,无法确定哪条线程会响应该信号。

F.线程可以单独设置信号阻塞掩码,但是线程之间共享信号处理函数。

A正确signal()函数用于设置信号处理函数,kill()函数用于向某个进程发送信号。

B错误。如果在注册信号处理函数之前收到信号,该信号不会被保留,将按照默认处理方式处理或被忽略。

C错误。信号的编号与优先级无关,并且信号处理过程可以被其他信号打断,信号的优先级不由编号决定。

D错误。信号阻塞掩码是可以继承给子进程的,子进程会继承父进程的信号阻塞掩码。

E正确。线程环境中,进程收到信号后,具体由哪个线程处理该信号是不确定的。

F正确。每个线程可以有自己的信号阻塞掩码,但信号处理函数是进程级的,所有线程共享。

6.以下说法错误的是:

A.使用semget()产生的信号量是系统对象,由内核维护,用一个key来识别,适用于进程间同步。

B.使用sem_t定义的信号量是进程变量,由进程本身维护,适用于进城内部的各线程间同步。

C.当信号量只能取0和1时,其作用相当于互斥锁。

D.一个进程在进入临界区的时候即使不加锁,理论上也能继续运行,而不会有任何语法限制。

E.读写锁将临界代码对共享资源的访问细分为读和写,在某些场合能明显地改善互斥锁的效率。

F.条件变量是一种复杂的同步机制,他必须与信号量一起配套使用。

A正确semget()函数用于创建或获取一个由内核维护的信号量集,可以用于进程间同步。

B正确sem_t类型的信号量是POSIX标准的,通常用于线程间同步。

C正确。二进制信号量(只能取0和1)在功能上类似于互斥锁,用于保护临界区。

D正确。加锁是为了保护临界区内的数据一致性和避免竞态条件,但在语法上没有强制要求。

E正确。读写锁允许多个线程同时读取,但写操作是独占的,这在读多写少的场景中效率更高。

F错误。条件变量通常与互斥锁(而不是信号量)一起使用。条件变量用于线程间的等待和通知机制,互斥锁保护 共享资源。

7.以下对信号的理解不正确的是:

A.信号是一种异步通信方式

B.信号只用在用户空间进程通信,不能和内核空间交互

C.信号是可以被屏蔽的

D.信号是通过软中断实现的

A正确。信号是一种异步事件通知机制,用于进程之间或进程与操作系统内核之间的通信。

B错误。信号不仅用于用户空间的进程间通信,也可以用于用户进程与内核之间的交互。例如,某些硬件事件或内 核中的异常情况会向用户进程发送信号。

C正确。进程可以设置信号屏蔽字来屏蔽特定的信号,从而暂时阻止该信号的处理。

D正确。信号的处理机制类似于软中断,当信号到达时,内核会打断当前的执行流,转而执行信号处理函数。

标签:常见,正确,编程,阻塞,概念,线程,信号,进程,函数
From: https://www.cnblogs.com/lwj294/p/18230834

相关文章

  • JavaFX 常见图表组件
    图表组件简介JavaFX提供了一系列的图表组件,允许开发者在应用程序中轻松集成各种图表和图形。名称中文描述BarChart条形图用于显示条形图,条形图通过水平或垂直的条形来表示数据的大小PieChart饼图用于创建饼图,饼图通过不同扇区的角度来展示数据的比例关系Li......
  • JavaFX 常见事件类型及事件处理
    什么是事件驱动编程事件驱动编程是一种编程范式,其中程序的执行流程是由外部事件(如用户输入、传感器读数、消息接收等)触发的。在这种模式下,程序不是按照预定的顺序执行,而是响应事件来执行代码。这种编程方式在需要处理异步操作或与用户交互的应用程序中非常常见。事件驱动编程广......
  • 适合小白学习的项目1901java体育馆管理系统Myeclipse开发mysql数据库web结构java编程
    一、源码特点java体育馆管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。java体育馆管理系......
  • 【Go专家编程——定时器】
    定时器定时器在Go语言开发中被广泛使用,准确掌握其用法和实现原理至关重要Go语言提供了两种定时器一次性定时器Timer:定时器只计时一次,计时结束便停止运行周期性定时器Ticker:定时器周期性地进行计时,除非主动停止,否则将永久运行。1一次性定时器Timer1.1简介Timer是一种......
  • java -jar命令常见使用方法
    1、基本用法:java-jarfilename.jar这是最简单的用法,直接指定要运行的JAR文件的名称(包括.jar扩展名)。Java虚拟机(JVM)将加载并执行JAR文件中的主类(在JAR文件的META-INF/MANIFEST.MF文件中指定为主类)。2.使用nohup在后台运行:如果你希望在后台运行JAR文件,......
  • JavaFX 常见UI控件使用
    UI控件介绍JavaFX提供了一套丰富的用户界面控件,这些控件可以用来创建现代的、交互式的图形用户界面(GUI)。JavaFX控件是JavaFX库中预定义的组件,它们封装了创建用户界面元素的复杂性,使得开发者可以快速地构建应用程序界面。以下是一些常见的JavaFX控件:控件名说明L......
  • JavaFX 常见布局组件的使用
    Laytout简介JavaFX提供了多种布局管理器(LayoutManagers),它们用于自动管理用户界面组件的位置和大小。布局管理器可以简化UI设计,因为它们会根据窗口的大小变化自动调整其中的组件。布局组件JavaFX包含以下布局组件:布局名称中文说明AnchorPane锚点布局允许开发......
  • Python编程学习第一篇——Python零基础快速入门(五)-列表(List)
    今天我们来一起学习Python的列表(list),Python中的列表(List)是一种有序、可变的数据结构,可以用来存储多个值。列表可以包含不同类型的数据,例如整数、浮点数、字符串等。以下是关于Python列表定义、语法和基本操作的详细示例:1.定义列表:   可以使用方括号[]来定义一个列表。......
  • Netty编程模型入门案例
    在Socket编程模型可以看到发送数据和响应数据直接涉及到的是I/O模型,基于TCP/IP的socket编程使用的是流套接字。那什么是I/O模型呢?简单的理解就是用什么样的通道进行数据的发送和接收——这很大程度上决定了程序通信的性能。下面介绍另一种编程模式——Netty框架的入门案......
  • 英语常见字符读法
    通讯行业称呼“#”叫做:poundkey(\#是英镑的代号,电子业sharp,正式名称为"numbersign"),称呼“*”叫做:starkey,数字键叫做:numberkey点:dot/:slash.\:backslashPunctuationmarksapostrophe(')(’)brackets(())([])({})(〈〉)colon(:)......