Windows常见面试题——进程线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows常见面试题——进程线程相关的知识,希望对你有一定的参考价值。

1.什么是进程,什么是线程,请谈谈你的理解

答:进程和线程是操作系统中一个很重要的概念。进程是指操作系统中运行的应用程序,而线程是指程序中独立完成某一任务、实现某一功能所需的单元。进程就像一个工厂,可以完成某种产品的生产,而线程就像是工厂不同的部门,可以互补干扰独立的完成某项工作。一个进程至少运行着一个线程。

2.如何在不同进程中访问同一个内核对象。请说出至少三种方法

答:要访问内核对象,那么就需要在进程的句柄表中都有一个句柄项是指向此内核对象的。
a.由父进程继承给子进程,当父进程创建子进程时,若指定了继承句柄的属性,则子进程能够将父进程中所有可继承的句柄全部继承到自己的句柄表中。(但是即便继承了句柄,子进程却不知道自己继承了谁,句柄值是什么,只能由父进程通过进程通讯的方式告诉它)
b.在进程A中创建内核对象时,给内核对象命名,在进程B中通过名字打开内核对象。(如果内核对象不能命名或者没有一个标识,则不能采用此方法。)
c.使用DuplicateHandle()这个API打开对象,获得句柄。

3.当一个进程销毁时,内核对象句柄表中的句柄都会被销毁吗?结合引用计数,谈谈你对这个问题的理解。

答:每一个内核对象都有一个引用计数,你可以认为每一个内核对象结构体都有一个字段叫做引用计数,当有一个进程创建或打开了此内核对象,那么内核对象的引用计数自增1,进程终止或者关闭句柄,引用计数自减1,当引用计数减为0时,内核对象自动销毁。因此,当一个内核对象M在进程A创建,另外一个进程对象也使用了此内核对象,进程A退出后,M并不会被销毁,因为他还在进程B中使用,只有没有进程使用此内核对象,内核对象才会自动销毁。

4.请谈一下你所掌握的进程间通讯的方式,越详细越好。

a.WM_COPYDATA消息
WM_COPYDATA消息是一个专门用于数据传输的消息,可以携带一个大体积的消息参数。不过WM_COPYDATA的数据会被发送到目标进程的栈空间进行保存,因此单次发送的数据不宜过大
b.邮槽
邮槽是Windows系统最简单的一种进程间通讯方式,一个进程可以创建一个邮槽,其他进程可以通过打开此邮槽与创建邮槽的进程进行通讯。邮槽的通讯时单向的,服务端只能读取消息,客户端只能写入消息,消息被写入邮槽以队列的形式保存。

以上是关于Windows常见面试题——进程线程的主要内容,如果未能解决你的问题,请参考以下文章

Java 并发常见面试题总结(上)

Java多线程常见面试题

操作系统常见面试题

Android 进程与线程(了解>使用>常见面试题)

操作系统常见面试题整理

操作系统常见面试题整理