Electronic Joint Business

Solution for E-Business

process

为 Windows containers 实现资源控制 (一) 作业对象

Windows 可以按容器或者按资源来实施资源控制。默认情况下, 运行的容器受 Windows 资源管理的约束, 以公平分配为原则, 但通过资源控制,开发人员或管理员可以限制或影响资源的使用。可控制的资源包括: CPU/处理器、内存/RAM、磁盘/存储、和网络/吞吐量等等。

Windows 容器利用作业对象(job objects)来对每个容器相关联的进程进行分组和跟踪。资源控制则在与容器关联的父作业对象上实施。 在 Hyper-V 隔离的情况下,系统同时对虚拟机和在虚拟机中运行的容器的作业对象进行自动资源控制,这样即使容器中运行的进程绕过了或逃脱了作业对象控制,虚拟机也会确保其无法越过定义的资源控制。

作业对象
Windows提供一个作业(job)内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么。作业对象允许将进程组作为一个单元进行管理。作业对象是可命名的(namable)、安全的、共享的对象, 可控制与之关联的进程的属性。对作业对象执行的操作会影响和作业对象相关联的所有进程。比如对工作集大小、进程优先级进行强制限制,或终止与作业关联的所有进程。你可以将作业对象想象成一个进程容器。但是,创建只包含一个进程的作业同样非常有用,因为这样可以对进程施加平时不能施加的限制。

作业对象 VS Linux 控制组 cgroups
Linux 的 cgroups 不等同于 Windows 和 VMS 的作业, 它缺乏作业机制的真正功能。这些年来人们一直在抱怨 Systemd 的这个问题,他们非常期待 cgroups 2.0 能提供真正的作业机制,因为现阶段的 Systemd 存在严重的错误,它无法自动终止控制组中的所有内容。

相反,提供“作业”抽象的操作系统内核一般都会提供了能取消/终止整个“作业”的方法,比如 Windows 的 TerminateJobObject()。而对于 Systemd,当其终止 cgroup 中的所有进程时, 它无法执行类似“终止作业”的系统调用,因为根本不存在这种机制。作为替代,Systemd 在应用模式下的某段循环代码中反复扫描 cgroup 中的所有进程 id,它重读一个 PID 列表文件, 并将信号发送到未列其中的新进程。这会带来几个问题:

>>> 阅读全文

 

, , ,

受保护进程的演进 <1>: Windows 8.1 如何抵御哈希传递攻击

6年多前我第一次发文讨论受保护进程的概念—《为什么受保护进程糟糕透顶》1,该标题已经清楚透露了我对这个未经深思熟虑的 DRM 方案的看法。显然之后微软对其内部机制进行了长考(的确,抛开 DRM,一个难以渗透的用户态进程在安全领域也是个有趣的课题),又创造了一类新进程:Protected Process Light,内核中通常缩写为 PPL。

和其笨重的兄弟(受保护进程)不同,Protected Process Light 作为安全屏障,为 Windows 平台带来了三种可以有效抵御威胁的安全增强。在接下来的系列文章里2,我们将会看到这些安全增强是如何实现的,本文先从如何抵御哈希传递攻击(Pass-the-Hash)3开始。

我们将涉及 LSASS 4 在 Windows 安全模型中的作用,然后讨论新的 PPL 模型背后的技术细节。要涵盖新的安全改进,我们也不得不涉及一些内部相关领域,所以我们也会对安全启动和保护变量稍加讨论。不过最重要的是,我们还将了解如何启用设置来抵御 PtH ,因为对于非 RT 的 Windows,该功能默认是禁用的。

LSASS 进程
Windows 使用众所周知的算法(NTLM)对本地用户帐户进行哈希运算并将结果保存到称为 SAM (安全帐户管理器) 的数据库中,SAM 本身是注册表的一个配置单元文件。和其他操作系统一样,总是存在各种脱机或在线攻击,目的不外是为了获取、重置,甚至重用保存在 SAM 中的哈希值,例如常见的”密码重置”应急启动盘,或者是恶意的权级提升等等。此外,还有其它一些加密数据存储在 SECURITY 数据库(也称为 LSASS 策略数据库),这是另一个注册表配置单元文件。该数据包括密文(secrets,如 LSA 密文信息),保存的纯文本密码等等。

Windows 通过被称为本地安全权威子系统(LSASS Local Security Authority Sub-System)的进程管理着这些信息的运行时状态,并最终负责所有登录操作 (包括远程登录到 Active Directory)。因此,为了要获得对这些数据的访问,主要通过用两种机制:

>>> 阅读全文

 

,

并行程序中的同步与通讯

在任何程序中,总会有些执行阶段要等待操作系统或者其他进程完成 I/O 操作或者同步操作。这时候,程序就无法处理其它工作,因为实际上是操作系统或者其它进程占用了宝贵的 CPU 时间。这就是滥用文件读/写操作的程序会如此之慢的原因。1

这时候进程不得不等待操作系统服务例程将 CPU 从其他进程那里释放出来。这种等待也被称为进程处于阻塞状态。诸如 EDA 这类串行计算,整个算法作为单个任务被执行,如果该进程在等待任一种阻塞操作,整个算法就会完全停顿。在处于阻塞状态的这段时间里,另一个进程占用了 CPU 的所有权,所以算法根本没办法进行。

并行程序提供了一种手段,能在同一计算中调用另一个进程以提高 CPU 利用率,当一个进程被阻塞的时候(如等待 I/O 操作或者同步操作),另一个进程则继续处理共同工作的其它部分。这种情况在单 CPU 或者多 CPU 机器上皆可发生。

反之,对于串行程序(即非并行算法)来说,而无论有多少可用的 CPU ,在任何情况下都只能用到单个 CPU。除非有编译器将源程序从串行转成并行,不过能实现这一目标的实属特例。 因此如果想同时利用多个 CPU ,编码时要手工运用某种并行技术。(在源代码中采用特殊指令,如 OpenMP)。

并行程序能将工作划分为较小的部分,因此多个进程可以一起工作并互相协作以便能在更短的时间内计算出同样的结果。这时,在等待 I/O 设备完成操作的同时,并行程序能可以继续处理另一部分工作。此外,并行程序还可以同时使用系统所有可用的 CPU。

>>> 阅读全文

 

, , , , , , ,

Windows 内部探秘之线程

文章评价:
在当今的编程世界中,多线程已经成为 .NET、Java 或 C++ 等各种编程语言的一个必要组成部分。要编写具备高响应且可扩展的应用程序,就必须借、助多线程编程的力量。你也许用过 TPL、PLINQ、Task Factories、线程池、异步编程等等基础类库(Framework Class Libraries –FCL)进行过多任务处理,所有的这些在背后都依赖于 Windows 线程的力量来实现并行的场景。了解 Windows 线程的基本结构对于更好地运用和理解诸如 TPL、PLINQ 这些高级特性总是非常有帮助,并帮助你以可视化的方式了解在系统中多个线程是如何协同工作的,特别是当你在调试多线程应用程序的时候。在这篇文章中,我想和大家分享一些关于Windows线程的基础知识,它可以帮助您了解操作系统如何实现线程的。

Windows 线程由什么组成?
让我们看看 Windows 线程的一些基本组件。在 Windows 线程中有三个基本组件:

  • 线程内核对象
  • TEB

所有这三个组件一起创造了 Windows 线程。我会尝试逐一解释这些组件,但在这之前,让我们先对 Windows 内核和内核对象做简要介绍,因为这些都是Windows 操作系统最重要的部分

操作系统内核
内核是任何操作系统的主要组件。它是应用程序和硬件之间的桥梁。内核提供了抽象层,使得应用程序可以由此与硬件交互。

内核是操作系统最先加载的部分之一,它会一直保留在物理内存中。内核的主要功能是管理计算机的硬件和资源,让其他程序可以运行并使用这些资源。要更多地了解内核,请访问此链接

>>> 阅读全文

 

, ,

了解Linux操作系统 (一)进程管理

文章评分:

前言
Linux 是一种由全世界开发者共同开发的开源操作系统。其源代码可以自由获取并可以在 GNU GPL 授权下使用。有很多公司提供不同的系统发行版供用户使用,如Redhat和Novell SUSE。大部分桌面发行版都可以从网站上免费下载,但服务器版一般是需要购买的。

在过去的几年里,Linux 被世界上许多公司的数据中心所使用。如今 Linux 操作系统为科学领域和企业用户所认可。它已经成为一种多种用途的操作系统。你能在多种嵌入式设备中发现它,如:防火墙、手机或电脑主机。所以 Linux 的性能对于科学领域和企业用户来说已经成为一个热门议题。然而一个操作系统可能被用来计算全球的天气预报或者被用来运行数据库等多种用途,Linux 必须能够为各种可能的使用情境提供优良性能。大多数 Linux 发行版含有常规的调校参数来满足所有用户。

IBM 意识到作为一种操作系统,Linux 非常适合在 IBM 系统之上运行企业级应用。大多数企业应用现在都可以运行在 Linux 上,包括文件服务器、打印服务器、数据库服务器、Web服务器、以及沟通和邮件服务器。

在企业级服务器运行 Linux 时需要对其性能进行监控,在必要时需要对服务器进行调优以消除影响用户的性能瓶颈。本红皮书将介绍一些调优 Linux 的方法、监控分析服务器性能的工具、以及对于特定应用的关键性能参数。本文目的是说明怎样分析和调校 Linux 操作系统,从而为在系统上运行的各种不同应用提供优良的性能。

>>> 阅读全文

 

, , , , ,