目录

操作系统的特性

操作系统的性质

并发性

操作系统支持多道程序设计,即允许多个程序并发执行。通过进程管理和调度机制,操作系统能够在单个处理器上模拟出多个任务同时运行的效果,提高系统资源利用率和用户响应体验。并发性也要求操作系统具备进程同步、互斥和通信等机制,以协调并发执行的进程间的相互关系

  • 并发与并行
    • 并发:并发是指在一段时间内看似同时处理多个任务的现象。在并发环境中,多个任务(例如线程、进程或协程)可能在逻辑上同时进行,但实际上它们可能并未在同一时刻真正同时执行,实际在同一时间间隔内交替发生。
    • 并行:并行是指多个任务在物理层面的真正同时执行。这意味着,不同的任务被分配到不同的处理器核心(或分布式系统中的节点)上,这些核心或节点能够同时、独立地处理各自的任务。
    • 区别 :
      1.执行方式:并发侧重于任务在逻辑上的重叠执行,通过时间切片和上下文切换在单一处理器或多处理器系统中交替执行;并行强调任务在物理上的同时执行,利用多处理器或多核架构真正地同时处理多个任务。
      2.资源利用:并发环境下,任务可能需要竞争共享资源,需要复杂的同步机制来保证正确性;并行任务可以充分利用独立的计算资源,减少资源争用,但在需要共享数据或协作时仍需同步。
      3.性能影响:并发有助于提高系统的响应性和任务处理的总体吞吐量,但单个任务的执行速度不会因为并发而加快;并行则可以直接缩短单个任务的执行时间,对于可并行化程度高的任务,能够实现显著的性能提升。

共享性

操作系统管理的资源(如内存、处理器、I/O设备等)通常是多个进程或用户共享的。操作系统必须确保资源的安全共享,防止因并发访问导致的数据不一致性、死锁等问题。

  • 互斥共享方式:互斥共享是一种访问控制策略,它规定在任意时刻,只允许一个线程或进程访问特定的共享资源(如数据结构、文件、设备等)。当一个线程进入临界区(即对共享资源进行操作的代码段)时,其他试图访问同一资源的线程必须等待,直至当前访问线程离开临界区。
    • 同步原语:实现互斥通常需要借助同步原语,如互斥锁(Mutex)、信号量(Semaphore)等。线程在访问共享资源前获取锁,访问结束后释放锁,从而实现对资源的保护。
    • 潜在阻塞:当某个线程持有互斥锁时,其他请求访问的线程可能会被阻塞,直到锁释放。这可能导致线程调度开销和潜在的死锁风险,需要谨慎设计和使用同步机制。
  • 同时访问方式:同时访问,特别是指并发读取的情况下,允许多个线程或进程在同一时刻对共享资源进行访问。这种访问方式并不限制所有线程都必须等待,而是允许在特定条件下(如仅读取不修改)多个执行单元同时操作共享数据。
    • 读写区分:对于读写操作,同时访问通常仅针对读操作进行放宽。多个线程可以同时读取共享资源,而写操作依然需要遵循互斥原则,以防止数据冲突。
    • 无锁条件:在某些场景下,可以使用无锁数据结构或原子操作来实现线程安全的同时访问。这些技术通常利用硬件提供的原子指令(如CAS)来避免锁定,从而降低同步开销,提高并发性能。

虚拟性

操作系统通过虚拟化技术为每个进程提供一个独立的、受保护的运行环境,即虚拟机。这包括虚拟处理器(每个进程拥有独立的指令流和执行上下文)、虚拟内存(每个进程看到自己的地址空间,通过页表进行映射)以及虚拟设备(通过设备驱动程序抽象,使得进程可以透明地访问设备)。虚拟性增强了系统的隔离性、安全性,同时也实现了对有限硬件资源的有效扩展和复用。

  • 时分复用技术:是一种在多任务环境中实现资源共享的技术,特别是在计算机操作系统中用于管理和调度处理器时间。该技术基于时间分割的概念,将处理器的执行时间划分为一系列离散的时间片(time slice),然后按照一定规则分配给多个并发执行的任务(如进程、线程)。这样,尽管在物理上只有一个处理器核心,但通过时分复用,可以为每个任务提供一种仿佛独占处理器的"虚拟性"。
  • 空分复用技术:如果说时分复用计数是通过利用处理机的空闲时间运行其他程序,提高了处理机的利用率,那么空分复用技术则是利用存储器的空闲空间分区存放和运行其他多道程序,以此来提高内存的利用率.但是单纯的空分复用只能提高内存的利用率,并不能在逻辑上扩大存储器容量,此时还必须引入虚拟存储技术.虚拟存储技术的本质是实现内存的时分复用,它通过时分复用的技术使一个程序在远小于他的内存环境中运行.

异步性

计算机系统中事件的发生往往是不可预测的、非同步的,如I/O中断、进程切换、定时器到期等。操作系统必须具备处理异步事件的能力,通过中断处理机制快速响应硬件事件,通过调度算法适时切换进程,确保系统的实时性和响应性。
*

持久性

操作系统通过文件系统管理磁盘等永久性存储设备,提供数据的长期保存和检索服务。文件系统确保即使在系统重启后,用户数据仍能保持不变,实现数据的持久存储。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
我是个假程序员3 小时前
sql server数据库可疑修复
数据库
Qlittleboy3 小时前
windows如何安装wkhtmltoimage 给PHP使用根据HTML生成图片
开发语言·windows·php
水w4 小时前
【Android Studio】解决报错问题Algorithm HmacPBESHA256 not available
android·开发语言·android studio
冷琅辞5 小时前
Elixir语言的云计算
开发语言·后端·golang
极限实验室5 小时前
如何使用 Nginx 代理 Easysearch 服务
数据库·nginx
whn19775 小时前
selectdb修改表副本
数据库
Mryan20055 小时前
解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
java·开发语言·spring boot·maven
Naomi5215 小时前
自定义汇编语言(Custom Assembly Language) 和 Unix & Git
服务器·开发语言·git·unix
烂蜻蜓5 小时前
C 语言命令行参数:让程序交互更灵活
c语言·开发语言·交互
TDengine (老段)5 小时前
TDengine 中的视图
数据库·物联网·oracle·时序数据库·tdengine·iotdb