- 浏览: 265217 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
多用户——多用户操作系统允许多个不同用户同时使用计算机的资源。操作系统必须确保均衡地满足各个用户的要求,他们使用的各个程序都具有足够且独立的资源,从而使一个用户的问题不会影响到整个用户群。Unix、VMS和大型机操作系统(如 MVS)是多用户操作系统的范例。
区分多用户操作系统和支持网络的单用户操作系统很重要。Windows 2000和Novell Netware均可以支持成千上万的网络用户,但操作系统本身并不是真正的多用户操作系统。系统管理员是Windows 2000或Netware的唯一“用户”。从操作系统的整体计划来看,网络支持和所有远程用户均可登录到网络,这些都属于由管理员用户运行的程序。
多用户是指系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。因此多用户特性变成了衡量操作系统好坏的重要标准,如何保障用户公平的使用系统也成了系统设计者必须要考虑的问题。
----而不是同时使用,哈,
为了实现多用户特性,Linux系统将进程的生存周期划分为4种状态:
(1)进程正在用户态下执行;
(2)进程正在核心态下执行;
(3)进程未正在执行,但是它已准备好——一旦调度程序选中了它,它就可以投入运行。很多进程可以处于这一状态,而调度算法决定哪个进程将成为下一个执行的进程;
(4)进程正在睡眠。
4种状态的转换并不是任意的,而是一个有向图
因为任何时刻一个处理机仅能执行一个进程,所以至多有一个进程可以处在第一种状态和第二种状态。这两个状态相应于两种执行态:用户态和核心态。划分这两个级别主要是对系统提供保护,核心态可以执行一些特权指令和进入用户态,而用户态则不能。核心态与用户态的划分为Linux多用户特性提供了保证。
Linux中大部分的系统调用包含在Linux的libc库中,通过libc调用方法可以调用这些系统调用。因此,当用户进程需要使用系统资源时(如文件、显示器输出、打印机输出等),会通过调用标准C函数库中的函数实现相应功能(如open打开文件、printf进行显示器输出等)。系统调用的激活有两种方法:system_call函数和lcall7调用门(call gate)。还有一种syscall函数,是通过调用lcall7实现的,所以不算作一种特有的方法。对于内部代码来说,system_call是所有系统调用的入口点,lcall7用来支持iBCS2(Inter二进制兼容规范标准的版本2,这里不作讨论)。用户进程通过libc激活system_call,该libc会把自己希望传递的参数装载到CPU寄存器中,并触发0x80软件中断,即Int $0x80。这个过程检查系统调用号,这个号码告诉内核进程请求哪种服务。然后,它查看系统调用表(sys_call_table)找到所调用的内核函数入口地址。接着,就调用函数完成相应功能,等返回后,做一些系统检查,最后返回到进程(或到其他进程,如果这个进程时间用尽)。这便是用户进程进行系统调用的整体过程。
在一个分时系统中如Linux, 几个进程能同时进行,并且它们可能都进行了系统调用。内核将通过禁止任意的上下文切换和控制中断的发生保护核心态下运行的一致性。仅当进程从“核心态运行 ”状态转移到“在内存中睡眠”状态时,内核才允许上下文切换。在核心态下运行的进程不能被其他进程所抢占,因此内核有时被称为不可抢先的(non-preemptive),尽管内核也并不抢占用户态下的进程。由于处理系统调用之前的数据是准备好的,所以在系统调用的过程中不会出现死锁状态。又因为内核处于不可抢先状态,所以内核可保持它的数据结构一致性,从而解决了互斥(mutual exclusion)问题——保证在任何时刻至多一个进程执行临界区代码。
举个例子,设有三个用户进程A、B、C同时进行系统调用函数。进程睡眠的条件是临界区处于上锁状态。在任一时刻只能有一个进程在执行,它发现临界区是上了锁的,就在临界区变为开锁的状态的事件上等待。终于,临界区的锁解开了,所有的等待的进程被唤醒并进入“就绪”状态。内核最终选择一个进程(比如B)执行。进程B发现临界区处于开锁状态,于是为临界区上锁,并且继续执行。如果后来进程B在为临界区解锁之前再次去睡眠(例如等候I/O操作的完成),则内核能调度其他进程去运行。如果它选择了进程A,进程A发现临界区处于上锁状态,那么它就再次去睡眠。进程C也做同样的事情。最后,进程B醒来并为缓冲区解锁,允许进程A也允许进程C存 取缓冲区。因此,保证了至多一个进程能获得资源的存取。再此期间,进程的睡眠与唤醒过程应被考虑成“原子的”:一个进程瞬时地进入睡眠状态,并停留在那儿 直至它被唤醒。在它睡眠之后,内核调度另一个进程去运行,并切换后者的上下文。由此可见,临界区在任何时刻只有至多一个进程在执行。
总体说来Linux实现多用户特性的关键在于,将所有系统调用在将数据准备好后通过一个接口(system_call) 进入核心态,由核心态进行权限检查控制,并且保证资源的独占访问。在表面上看,系统调用就合其他的函数调用一样,只要结果符合预计的情况,应用程序就不能 确定是否真正使用了内核,从而达到核心态切换对用户层透明的目的。这样的过程也就保证了,每个用户进程对资源操作的互不影响。从而实现了Linux系统的多用户特性。
区分多用户操作系统和支持网络的单用户操作系统很重要。Windows 2000和Novell Netware均可以支持成千上万的网络用户,但操作系统本身并不是真正的多用户操作系统。系统管理员是Windows 2000或Netware的唯一“用户”。从操作系统的整体计划来看,网络支持和所有远程用户均可登录到网络,这些都属于由管理员用户运行的程序。
多用户是指系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。因此多用户特性变成了衡量操作系统好坏的重要标准,如何保障用户公平的使用系统也成了系统设计者必须要考虑的问题。
----而不是同时使用,哈,
为了实现多用户特性,Linux系统将进程的生存周期划分为4种状态:
(1)进程正在用户态下执行;
(2)进程正在核心态下执行;
(3)进程未正在执行,但是它已准备好——一旦调度程序选中了它,它就可以投入运行。很多进程可以处于这一状态,而调度算法决定哪个进程将成为下一个执行的进程;
(4)进程正在睡眠。
4种状态的转换并不是任意的,而是一个有向图
因为任何时刻一个处理机仅能执行一个进程,所以至多有一个进程可以处在第一种状态和第二种状态。这两个状态相应于两种执行态:用户态和核心态。划分这两个级别主要是对系统提供保护,核心态可以执行一些特权指令和进入用户态,而用户态则不能。核心态与用户态的划分为Linux多用户特性提供了保证。
Linux中大部分的系统调用包含在Linux的libc库中,通过libc调用方法可以调用这些系统调用。因此,当用户进程需要使用系统资源时(如文件、显示器输出、打印机输出等),会通过调用标准C函数库中的函数实现相应功能(如open打开文件、printf进行显示器输出等)。系统调用的激活有两种方法:system_call函数和lcall7调用门(call gate)。还有一种syscall函数,是通过调用lcall7实现的,所以不算作一种特有的方法。对于内部代码来说,system_call是所有系统调用的入口点,lcall7用来支持iBCS2(Inter二进制兼容规范标准的版本2,这里不作讨论)。用户进程通过libc激活system_call,该libc会把自己希望传递的参数装载到CPU寄存器中,并触发0x80软件中断,即Int $0x80。这个过程检查系统调用号,这个号码告诉内核进程请求哪种服务。然后,它查看系统调用表(sys_call_table)找到所调用的内核函数入口地址。接着,就调用函数完成相应功能,等返回后,做一些系统检查,最后返回到进程(或到其他进程,如果这个进程时间用尽)。这便是用户进程进行系统调用的整体过程。
在一个分时系统中如Linux, 几个进程能同时进行,并且它们可能都进行了系统调用。内核将通过禁止任意的上下文切换和控制中断的发生保护核心态下运行的一致性。仅当进程从“核心态运行 ”状态转移到“在内存中睡眠”状态时,内核才允许上下文切换。在核心态下运行的进程不能被其他进程所抢占,因此内核有时被称为不可抢先的(non-preemptive),尽管内核也并不抢占用户态下的进程。由于处理系统调用之前的数据是准备好的,所以在系统调用的过程中不会出现死锁状态。又因为内核处于不可抢先状态,所以内核可保持它的数据结构一致性,从而解决了互斥(mutual exclusion)问题——保证在任何时刻至多一个进程执行临界区代码。
举个例子,设有三个用户进程A、B、C同时进行系统调用函数。进程睡眠的条件是临界区处于上锁状态。在任一时刻只能有一个进程在执行,它发现临界区是上了锁的,就在临界区变为开锁的状态的事件上等待。终于,临界区的锁解开了,所有的等待的进程被唤醒并进入“就绪”状态。内核最终选择一个进程(比如B)执行。进程B发现临界区处于开锁状态,于是为临界区上锁,并且继续执行。如果后来进程B在为临界区解锁之前再次去睡眠(例如等候I/O操作的完成),则内核能调度其他进程去运行。如果它选择了进程A,进程A发现临界区处于上锁状态,那么它就再次去睡眠。进程C也做同样的事情。最后,进程B醒来并为缓冲区解锁,允许进程A也允许进程C存 取缓冲区。因此,保证了至多一个进程能获得资源的存取。再此期间,进程的睡眠与唤醒过程应被考虑成“原子的”:一个进程瞬时地进入睡眠状态,并停留在那儿 直至它被唤醒。在它睡眠之后,内核调度另一个进程去运行,并切换后者的上下文。由此可见,临界区在任何时刻只有至多一个进程在执行。
总体说来Linux实现多用户特性的关键在于,将所有系统调用在将数据准备好后通过一个接口(system_call) 进入核心态,由核心态进行权限检查控制,并且保证资源的独占访问。在表面上看,系统调用就合其他的函数调用一样,只要结果符合预计的情况,应用程序就不能 确定是否真正使用了内核,从而达到核心态切换对用户层透明的目的。这样的过程也就保证了,每个用户进程对资源操作的互不影响。从而实现了Linux系统的多用户特性。
发表评论
-
ssh密钥的生成与使用
2019-08-12 15:16 807一 客户端是linux 1.在客户端生成密钥对 [roo ... -
Linux RPM 命令参数使用详解 查看 rpm包依赖性
2017-07-21 18:09 1206rpm 执行安装包 二进制包(Binary)以及源代码包(So ... -
2015-linux操作命令汇总
2015-06-18 10:34 7131.查找磁盘空间利用情 ... -
Vi/Vim查找替换使用方法
2014-07-03 09:29 591vi/vim 中可以使用 :s 命 ... -
在linux下如何判断是否已经安装某个软件?
2014-07-03 08:50 636我的系统是red hat 我用命令rpm查是否安装了某个软件 ... -
linux的NFS详细配置方法
2014-07-01 14:46 542网络文件系统(NFS,Network File System) ... -
linux重定向及nohup不输出的方法
2014-06-27 15:12 836先说一下linux重定向: 0、1和2分别表示标准输入、标准 ... -
使用nohup让程序在远程主机后台运行
2014-06-27 14:27 651因为我购买的一个国外 ... -
Redhat Linux NFS配置
2014-06-27 13:05 423NFS简介: NFS是网络文件系统的简写(network ... -
Linux iptables 防火墙 添加删除 端口
2014-06-25 09:39 847一. Linux 防火墙的启动 ... -
This system is not registered with RHN
2014-06-19 14:18 549红帽中出现This system is not registe ... -
ldconfig命令作用
2014-05-30 11:09 788ldconfig是一个动态链接库管理命令 为了让动态链接库为 ... -
Linux下tar的基本安装 .
2014-05-29 15:25 6391、将安装文件拷贝至你的目录中,如果是以root身份登录上的, ... -
This system is not registered with RHN
2014-05-29 15:17 522红帽中出现This system is not registe ... -
SSH Secure Shell Client中文乱码
2014-05-16 10:15 635使用linux,在用户根目录下有一个.bash_profile ... -
Linux netstat命令详解
2013-11-27 16:18 595简介 Netstat 命令用于显示各种网络相关信息,如网络连 ... -
CentOS 6.3的U盘安装方法
2013-11-14 13:55 1083最近要给服务器重装系 ... -
linux:SUID、SGID详解
2013-11-06 17:08 642如果你对SUID、SGID仍有迷惑可以好好参考一下! Cop ... -
linux命令收集
2013-11-06 15:46 504ps x | grep `eclipse` sudo ap ... -
linux系统权限
2013-11-06 10:40 5571.添加用户:useradd user 2.chmod (- ...
相关推荐
在Windows操作系统中,多用户远程访问功能允许多个用户同时连接到同一台计算机并进行操作,这对于团队协作、远程办公或技术支持等场景非常有用。MSTSC(Microsoft Terminal Services Client)是Windows内置的远程...
Mac OS X系统(从macOS Catalina开始默认采用APFS,之前版本多使用HFS+)使用的文件系统与Windows的NTFS或FAT系列不兼容。因此,要实现跨平台读写,我们需要借助特定的驱动程序或者软件。 1. **Paragon HFS+ for ...
Mac OS 系统用户访问 Windows 域的解决方法 摘要:本文档介绍了 Mac OS 系统用户无法访问 Windows 域的解决方法,旨在帮助 Mac OS 用户加入 Windows 域,从而享受到 Windows 域带来的便捷。 一、了解 Windows 域的...
标题 "oshelp_OSVersionMS_oscheck_osversion_windows8_" 暗示了这是一个与操作系统版本检测相关的项目,特别是针对Windows 8系统。描述中的 "Determine OS Windows version such as Windows 7" 表明该程序或库是...
《Windows内核情景分析——采用开源代码ReactOS(上册)》是一本深入解析Windows NT内核的权威著作。本书以其独特的视角,结合开源项目ReactOS的源代码,为读者揭示了操作系统内核的奥秘,特别关注了进程线程管理和...
这对于多用户环境下的系统管理员来说,是一种高效的协作工具。 5. **自定义脚本**:用户可以编写和运行自定义脚本,用于自动化重复任务,如执行服务器维护、系统检查等,提高运维效率。 6. **插件扩展**:皇家TS...
- **用户界面**: ReactOS实现了类似Windows的图形用户界面。 - **硬件兼容性**: ReactOS支持广泛的硬件设备,能够运行许多为Windows设计的驱动程序。 - **API兼容性**: ReactOS努力实现对Windows API的高度兼容,...
《Windows内核情景分析——采用开源代码ReactOS》是一份深度探讨Windows内核及驱动开发的资料,结合了ReactOS这一开源项目,为读者提供了一种全新的理解和学习途径。ReactOS是一个旨在实现与Microsoft Windows API...
ReactOS的核心目标是实现与Windows NT家族系统的二进制兼容,这意味着它不仅在用户界面层面上模仿Windows,而且在系统底层也尽量遵循相同的设计原则和实现。通过这种方式,ReactOS能够运行大量为Windows设计的应用...
本教程将指导用户在 Windows 和 Mac OS 平台下安装 Mac OS 10.7 Lion 操作系统。安装过程需要准备多个工具和文件,包括 TransMac、硬盘安装助手和 Mac OS X Lion 安装镜像文件。 一、准备工作 在开始安装之前,...
全书从“内存管理”、“进程”、“进程间通信”、“设备驱动”等多个方面进行分析介绍,所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据,使读者能深入理解Windows内核的方方面面,也可以使...
线程处理方面,Symbian OS 采用了一种基于优先级的调度策略,这与 Windows 中的多线程模型有所区别。Symbian 的线程管理机制更加注重实时性,这对于开发资源受限的移动设备非常重要。 #### 四、开发流程 ##### ...
3. `os.path.commonprefix(list)`: 给定一个包含多个路径的列表,返回这些路径中最长的公共前缀。这在寻找共享目录结构时很有用。 4. `os.path.dirname(path)`: 提取路径中的目录部分。对于`/home/user/documents/...
OS/2 2.1在当时是一个先进的平台,具有许多现代操作系统所具备的特性,例如窗口化用户界面、多任务处理以及对网络和硬件的广泛支持。 首先,让我们详细了解一下OS/2 2.1的主要特点: 1. **增强的图形用户界面 (GUI...
为了满足您的要求,我将基于标题中提到的“Windows内核情景分析”和“采用开源代码ReactOS(上册)”生成相关的知识点。 首先,“Windows内核情景分析”这本书可能包含了以下几个方面的知识点: 1. Windows内核概述...
在Windows环境下使用虚拟机安装Mac OS的教程是一个实用的技术指南,尤其对于那些希望在不离开Windows操作系统的同时体验或开发Mac OS应用的用户来说。虚拟机技术允许我们在一个系统上同时运行多个独立的操作系统,而...
4. **用户界面**:ReactOS的用户界面设计也尽量接近Windows,包括窗口管理、桌面环境和图形用户界面组件。这使得用户在切换到ReactOS时能快速适应,同时也方便了应用的移植。 5. **编译和构建过程**:ReactOS的源码...
ReactOS键盘切换程序,简称KBSwitch,是ReactOS操作系统中的一个重要组件,它负责管理和实现系统小...通过持续的优化和完善,KBSwitch将不断适应更多用户的需求,推动ReactOS向着更加成熟、完善的开源操作系统迈进。
【标题】"OS-Windows_windows_zabbix_源码.zip" 提供的是Zabbix监控系统在Windows平台上的源代码。Zabbix是一款开源的企业级监控解决方案,它能够监控各种网络参数以及服务器健康状况,确保IT基础设施的稳定运行。这...