Windows服务与会话的理解
服务
Windows NT操作系统是基于客户/服务器模式的(C/S)。将操作系统中最基本的部分放到内核中,而把操作系统的绝大多数部分都放到微内核外面的一组服务器(进程)中实现。如对进程管理的进程管理服务器,对虚拟存储器管理功能的虚拟存储器服务器,对I/O设备管理的I/O设备管理服务器,他们都是通过进程实现的,运行在用户态(对Windows来说一般都运行在用户态中的会话0下)。
服务与客户进程的通信
服务与客户进程是通过内核提供的消息传递机制实现信息交互的
会话
Windows通过会话管理器(Smss.exe)管理各个会话。Windows创建的第一个会话被称为会话0,是系统用户SYSTEM的会话通常称为会话0,服务就是运行在此会话中。
每当window登录一个新的用户时就会创建一个新的会话,然后通过终端服务客户端也就是我们最熟悉的那个Windows界面,其实际算是一个应用程序。我们通过鼠标与键盘操作,终端服务客户端将这些操作传送到会话0对应的服务,然后服务将相应的输出结果在返回为终端服务客户端并显示在我们面前。
内存中同时运行了会话0对应的程序(服务),会话1对应的程序(客户用户1的进程),会话2对应的程序(客户用户2的进程)。Windows为每一个客户用户会话都维护了一个桌面窗口,只有属于本会话的进程的窗口才会被显示出来,这也是为什么我们同时登陆两个用户而其各自桌面上只存在自己的进程的窗口的原因。
例如我在我的Windows计算机上同时登陆两个用户,一个为管理员用户,另一个为普通用户且用户名为QYS。假如当前我操作的用户是管理员用户,在我的桌面上是不会出现QYS用户的qq进程的窗口的,但是其实际正在内存中运行。
以上都为个人理解!
参考书籍:《计算机操作系统》,《Windows核心编程》
参考博客:https://www.cnblogs.com/leesf456/p/5375198.html
最新文章
- Sql Server函数全解<;三>;数据类型转换函数和文本图像函数
- Solr部分更新MultiValued的Date日期字段时报错及解决方案
- JQuery中的DOM操作
- 纯js代码实现手风琴特效
- 利用sql_trace跟踪一个指定会话的操作
- World’s Smallest h.264 Encoder
- SOFTWARE_INTRODUCE_02
- 安卓的UI界面开发(初学者推荐)
- 为什么C++中声明和定义要分开写
- Linux之环境搭建(一)
- java 一个实例
- [jzoj]1417.数学题
- centos中nodejs npm安装cordova
- 由于ip改变重新配置CM集群
- Sketch 使用中文字体
- 洛谷P3994 Highway(树形DP+斜率优化+可持久化线段树/二分)
- 浅析Linux线程调度
- Tomact8部署在linux下启动很慢详解
- Java 9和Java 10的新特性
- How to reduce Index size on disk?减少ES索引大小的一些小手段