跳到主要内容

计算机基础

详解计算机基础的相关概念


进程和线程区别

进程(Process)和线程(Thread)是计算机操作系统中的两个核心概念,它们在程序执行和资源管理方面有着不同的特点和作用。下面是它们之间的区别:

  1. 定义:进程是程序的一次执行过程,是资源分配的基本单位;线程是进程的一部分,是程序执行的最小单位。

  2. 资源拥有:每个进程都拥有独立的内存空间和系统资源,包括文件、设备、网络连接等;而线程是在进程内部共享进程的资源。

  3. 调度和执行:操作系统以进程为单位进行调度,给每个进程分配CPU时间片来执行;而线程是进程内部的执行单元,由线程调度器调度执行。

  4. 并发性:由于进程拥有独立的内存空间和资源,不同进程之间可以并发执行,相互之间不会影响;而线程是在同一个进程内部执行,多个线程共享进程的资源,因此线程之间需要通过同步机制来保证数据的一致性和安全性。

  5. 创建和销毁:创建和销毁进程需要操作系统的参与,而线程的创建和销毁相对较轻量,可以由程序自身来控制。

  6. 开销:由于进程拥有独立的资源和内存空间,进程之间切换的开销较大;而线程之间的切换开销较小,因为线程共享进程的资源和内存空间。

总的来说,进程和线程是操作系统中用于实现并发执行的两种基本单位,进程是资源分配的基本单位,而线程是调度和执行的基本单位。它们在资源拥有、调度方式、并发性、创建销毁方式、开销等方面有着明显的区别。在实际应用中,可以根据需求和具体场景选择使用进程或线程来实现并发和多任务处理。

下面是进程和线程在几个方面的对比表格

特性进程线程
定义程序的一次执行过程,是资源分配的基本单位进程的一部分,是程序执行的最小单位
资源拥有拥有独立的内存空间和系统资源在进程内部共享进程的资源
调度和执行以进程为单位进行调度,给每个进程分配CPU时间片在进程内部调度执行
并发性不同进程之间可以并发执行,相互之间不会影响线程在同一个进程内部执行,共享进程的资源
创建和销毁需要操作系统的参与可以由程序自身来控制
开销进程切换开销较大线程切换开销较小
  • 进程 操作系统资源管理的最小单位
  • 线程 操作系统程序执行的最小单位

线程的本质是对计算机资源的复用。 一个进程实际上包含如下资源的抽象:

  1. cpu 状态,寄存器等状态记录
  2. 内存执行状态记录
  3. 程序权限状态记录
  4. 和各种通选状态的记录

在 linux 操作系统下只有任务的概念,进程和线程的意义 就是控制不同的 COE(context of execution) 参看此文理解 进程内存结构

操作系统进程线程

进程(Process)和 线程(Thread)是操作系统中的重要概念。

进程是指计算机中已经运行的程序,它是操作系统资源分配的最小单位。进程拥有独立的内存空间和系统资源,如打开的文件、网络连接等。在操作系统中,每个进程都拥有一个唯一的标识符,称为进程ID。

线程是进程中的执行单元,一个进程可以包含多个线程,它们共享进程的内存空间和系统资源。线程是CPU调度的最小单位,它可以看作是进程中的一个独立执行流程。与进程不同的是,线程没有自己的系统资源,只有一部分与进程共享的资源。在操作系统中,每个线程都拥有一个唯一的标识符,称为线程ID。

可以将进程和线程的关系类比为一家工厂。工厂代表一个进程,工厂中的工人代表线程。每个工人负责自己的一部分工作,但是他们共享工厂的资源,如原材料、设备等。

总的来说,进程和线程都是操作系统资源分配和调度的基本单位,它们之间的关系是多对一的,即多个线程可以属于同一个进程,共享进程的资源。

协程(Coroutine)

协程(Coroutine)是一种用户态的轻量级线程,也称为协作式多任务处理,与传统的抢占式多任务处理方式不同,协程的调度不由系统来控制,而是由程序员自己控制。在协程内部,程序可以自己决定在何处挂起、何时恢复执行。协程可以有效地避免多线程并发操作时出现的死锁、竞争、状态同步等问题,同时协程又可以充分利用 CPU 资源,提高程序执行效率。

在协程中,所有任务共享一个线程,通过在任务之间切换来实现并发,这种方式可以避免线程切换时的性能损耗,也可以避免线程之间的同步问题。协程主要有以下特点:

  • 协程是一种轻量级的线程,其切换过程不需要操作系统介入,而是在用户态实现的。
  • 协程是一种非抢占式调度方式,需要程序员显式地让出执行权。
  • 协程可以共享全局变量等状态信息,但是需要程序员自己管理状态同步。

协程在很多语言中都得到了广泛的应用,例如 Python 中的 asyncio、Lua 中的 coroutine 等。在前端领域中,JavaScript 的 Generator 函数就是一种协程实现方式。

权限管理模型相关概念

  • DAC (Discretionary Access Control): 用户对资源有自主权,资源的所有者可以自由地授予或撤销其他用户的访问权限。

  • MAC (Mandatory Access Control): 系统管理员定义了一组强制性的规则,控制用户对资源的访问。用户不能改变这些规则,这通常应用于一些需要高度安全性的环境。

  • RBAC (Role-Based Access Control): 根据用户的角色分配权限,用户被分组为角色,每个角色被赋予一定的权限。这简化了权限管理,特别适用于大型组织。

  • ABAC (Attribute-Based Access Control): 根据用户的属性来控制访问权限。这可以包括用户的属性、环境信息等,提供更细粒度的控制。

  • PBAC (Policy-Based Access Control): 根据预定义的策略来控制访问权限。策略可以包括多个规则和条件,灵活适应各种访问控制需求。

DAC

Discretionary Access Control(DAC)自主访问控制,是一种权限管理模型,强调资源的所有者对其资源拥有自主权,可以自由决定其他用户对其资源的访问权限。每个用户被赋予特定的权限,这些权限决定了用户能够对资源执行哪些操作,如读取、写入、执行等。资源的所有者通常是创建该资源的用户,而DAC模型提供了一定的灵活性,因为资源的所有者可以根据实际需要灵活地管理对其资源的访问。在 DAC 模型中,文件系统是一个常见的应用场景,其中文件和文件夹具有所有者,所有者决定了其他用户的访问权限。这是一种相对简单而直观的权限管理方式,适用于一些相对简单的场景。

这种设计最常见的应用就是文件系统的权限设计,如微软的 NTFS。 01

MAC

Mandatory Access Control(MAC,强制访问控制)是一种权限管理模型,其核心特点在于由系统管理员预先定义一组强制性规则,这些规则决定了用户对资源的访问权限。在 MAC 模型中,用户无法自行修改这些规则,这种不可修改性使得 MAC 模型适用于高度安全性的环境。与 Discretionary Access Control(DAC)不同,MAC 强调系统级别上的强制性控制,而不是资源所有者的自主权。此模型通常使用标签或级别来表示用户和资源的安全属性,并支持多级别的安全控制。 MAC 在军事、政府和情报机构等对安全性要求极高的领域中得到广泛应用。在 MAC 模型下,系统管理员的定义对于用户和资源的访问权限至关重要,确保了系统的整体安全性和合规性。

这个权限最大的一个特点就是:权限标签和分级。使用标签或级别来表示用户和资源的安全级别。这些标签反映了用户和资源的安全属性,用于决定是否允许访问。

举例:MAC 模型通常在对安全性要求极高的领域中得到广泛应用,如军事、政府和情报机构。

例如:考虑一个政府机构的文件系统,其中包含了各种敏感信息。在 MAC 模型下:

  • 系统管理员定义了访问控制规则,例如只有具有 "Top Secret" 标签的用户才能访问 "Top Secret" 级别的文件。
  • 用户无法自行更改其安全级别或绕过系统管理员定义的规则来进行查看。
  • 文件的创建者是某个用户,该用户也是一位普通用户, 但是只能查看, 不能篡改文件的访问级别和编辑级别。

RBAC

Role-Based Access Control(RBAC,基于角色的访问控制)是一种权限管理模型,其核心思想是根据用户的角色进行访问控制。在 RBAC 模型中,用户被分配到一个或多个角色,而每个角色都具有特定的权限,用户通过角色来获取相应的访问权限。 目前来说基于角色的访问控制模型是应用较广的一个,特别是 2B 方向 SAAS 领域,应用尤其常见。

image.png

其中最重要的两个关键因素就是:权限与角色关联、角色再分配给具体的用户;

ABAC

基于属性的访问控制模型(ABAC: Attribute-Based Access Control),被一些人称为是权限系统设计的未来。 不同于常见的将用户通过某种方式关联到权限的方式,ABAC 则是通过动态计算一个或一组属性是否满足某种条件来进行授权判断(可以编写简单的逻辑)。 用户、资源和环境都有各自的属性。这些属性可以包括用户的身份、角色、部门、资源的类型、敏感级别、时间等。 访问控制策略通过属性的匹配和条件评估来确定是否允许访问。例如,如果用户的角色属性是 "Manager" 且资源的敏感级别属性是 "High",则允许访问。

举例子:考虑一个企业的文档管理系统,使用 Attribute-Based Access Control (ABAC) 模型来控制对文档的访问。在这个例子中,访问控制的决策基于用户的属性、文档的属性以及其他环境因素。

  1. 用户属性:
  • 属性 1:用户角色(Role) - 可能的值包括 "Employee"(员工)和 "Manager"(经理)。
  • 属性 2:用户部门(Department) - 包括 "Sales"(销售部门)和 "Engineering"(工程部门)。
  1. 文档属性:
  • 属性 1:文档类型(Document Type) - 包括 "Internal"(内部文档)和 "Confidential"(机密文档)。
  • 属性 2:文档部门(Document Department) - 指定文档所属的部门。
  1. 环境属性:
  • 属性 1:访问时间(Access Time) - 确定用户访问文档的时间。
  1. 策略定义:
  • 规则 1:如果用户角色是 "Manager" 且文档类型是 "Confidential",允许访问。
  • 规则 2:如果文档部门是 "Sales" 且访问时间是工作时间,允许员工访问。
  1. 访问请求示例:
  • 用户A是 "Manager",想要访问一个 "Confidential" 类型的文档,由于规则 1 的匹配,允许访问。
  • 用户B是 "Employee",想要访问一个 "Internal" 类型的文档,在工作时间内,由于规则 2 的匹配,允许访问。

在这个例子中,ABAC 模型通过匹配用户、文档和环境的属性来决定访问权限。管理员可以根据组织的需求定义和更新访问规则,以实现更精细和动态的访问控制。

这种权限设计侧重点, 在于数据属性

PBAC

Policy-Based Access Control (PBAC) 是一种基于策略的访问控制模型,它的核心思想是通过定义和实施一组策略来管理对系统资源的访问。在 PBAC 中,访问控制是通过规则和条件的集合来决定的,这些规则描述了在特定条件下用户能够执行的操作。

跟 ABAC 是同属于一个级别的权限控制模型, 只是侧重点不同, PBAC 更加侧重于: 重定义和实施访问控制策略。这些策略是由一组规则组成,这些规则描述了在特定条件下用户能够执行的操作。

举例子:

考虑一个企业的文件管理系统,管理员使用 Policy-Based Access Control (PBAC) 来定义访问控制策略,以确保对文件的访问仅限于授权用户和特定条件下的访问。

  1. 用户和角色定义:
  • 角色 1:Employee(普通员工)
  • 角色 2:Manager(经理)
  • 角色 3:Admin(管理员)
  1. 资源定义:
  • 资源 1:Project Documents(项目文件夹)
  • 资源 2:Financial Reports(财务报告文件夹)
  1. 策略定义:
  • 策略 1:如果用户是经理,允许访问项目文件夹。
  • 策略 2:如果用户是管理员,允许访问财务报告文件夹。
  • 策略 3:如果访问时间在工作时间内,允许访问项目文件夹和财务报告文件夹。
  • 策略 4:如果用户是普通员工,仅在工作时间内允许访问项目文件夹。

这些策略和规则的组合允许管理员定义对文件的访问控制。例如,一个经理在工作时间内可以访问项目文件夹,而管理员可以在任何时间访问财务报告文件夹。这个例子展示了 PBAC 模型如何通过灵活的策略定义,实现对资源访问的细粒度控制。管理员可以根据企业需求调整和更新这些策略,以适应不同的访问控制需求。

参考文档资料

22%