admin 管理员组

文章数量: 1086019


2024年3月13日发(作者:getrealpath() php)

一、 进程的内存管理

1、 必选题

1) 讲述虚拟内存和物理内存

按32位处理器,系统为每个进程分配一个独立的4G大小的虚

拟内存空间,物理内存大小根据实际内存条大小。

虚拟内存用来保护物理内存不被直接访问,进程间地址空间的隔

离。用户程序运行在虚拟空间中,并和物理内存进行映射。

2) 阐述Linux中进程的内存分配

从高地址到低地址,4G的虚拟内存分为:

内核空间(1G),用户空间(3G)

用户空间中依次为存放环境变量和命令行参数的空间、栈、共享

内存映射区、堆、数据段和代码段。

2、 可选题

1)讲述进程内存的段页式管理

虚拟内存分成若干个段(数据段、代码段、堆、栈),

段内分为若干个页(一页一般为4K),和物理内存之间映射也是按照段和页来

映射的,传输数据大小单位为页。

2)虚拟内存和物理内存之间如何进行映射的?

 通过MMU(内存管理单元)进行映射,将虚拟地址转换为物理

内存。

 按照页的单位大小来进行数据的映射。

 弥补物理内存容量的不足,在硬盘上开设一块交换分区进行页的

调入和调出。

二、 进程间通信的机制

1、 必选题

1) 讲述进程间通信的方式

信号、管道、消息队列、共享内存、套接字

2) 讲述关于System V IPC对象:

答: 包括消息队列、共享内存和信号量,

创建在内核中

内核负责释放

IPC对象在内核空间中有唯一性标识ID

3) 讲述共享内存:

答:是被多个进程共享的一块物理内存

共享内存是进程间共享数据的一种最快的方法

共享内存不提供同步机制

4) 匿名管道和命名管道的区别

a) 匿名管道用于有关系进程(父子进程和兄弟进程)之间的通

b) 命名管道可用在任何进程间的通信

c) 命名管道在文件系统有一个对应的管道文件

d) 匿名管道有pipe系统调用生成,命名管道由mkfifo系统调用

产生管道文件,再通过open、read和write进行读写通信。

5)在信号量集控制函数int semctl(int semid, int semnum, int cmd, …

/*union semun arg*/)中,若要对所有的信号量进行操作,则将semnum设置为:

A、 0 B、 1 C、 2 D、 3

答案: A

6) 在进程通信中,对放置在信号量集中的所有信号量进行semop操作时

是否必须都要成功?

不是,可以部分成功,部分不成功。

7) 共享内存的同步和互斥采用什么技术来解决?

进程信号量可以解决共享内存的同步和互斥。

2、 可选题

1) 阐述管道的读写特性

a) 管道是阻塞性的,当进程从管道中读取数据,若没有数据

进程会阻塞

b) 当一个进程往管道中不断地写入数据但是没有进程去读

取数据,此时只要管道没有满是可以的,但若管道放满数据的则

会报错。

c) 当读一个写端已被关闭的管道时,在所有数据被读取后,

read返回0。

d) 如果写一个读端已被关闭的管道,则产生信号SIGPIPE

2) 管道(pipe)默认是阻塞性的,可通过___C___方式修改为非阻

塞性的

A、open() B、write() C、fcntl() D、read()

3) fork出一个子进程后,父进程中创建的共享内存和通过shmat

系统调用映射的地址是否会被继承?

答:共享内存不会被继承,映射的地址会被继承。

4) 讲述如何利用进程信号量和共享内存来解决读者和写者问题

(一个写者一个读者,双向通知)


本文标签: 进程 管道 内存 共享内存 物理