重学操作系统原理系列 - 进程管理(一)

简介: 重学操作系统原理系列 - 进程管理(一)

六、线程

6.1 线程的引入

引入理由

  • 应用的需要
  • 开销的考虑
  • 性能的考虑

6.1.1 应用的需要

我们看一个例子,一个web服务器的工作方式

  • 从客户端接收网页请求
  • 从磁盘上检索相关的网页,读入内存(此时进程是停止的,直到读取完毕)
  • 将网页返回给对应的客户端

可以看到每次从磁盘读取的时候进程都是暂停的,这样会导致性能低下

那如何提高服务器的工作效率?通常情况下是使用网页缓存

没有线程情况下的两种解决方案

  • 一个服务进程undefined这种情况下也是一种顺序编程,虽然采用了缓存机制,但是性能同样不高。而如果设置多个进程,这多个进程之间又是相互独立的,有独立的地址空间,所以不能共享信息
  • 有限状态机undefined这种方式编程模型复杂,采用非阻塞的I/O

多线程的解决方式

image.png

**说明:**这是一个多线程的web服务器的工作方式,首先读取客户端的请求,之后由分派线程将各个任务分派给工作线程,这里还是采用了网页缓存

于是我们可以看到一个web服务器的实现有三种方式:


image.png

6.1.2 开销的考虑

image.png

6.1.3 性能的考虑

如果有多个处理器的话,一个进程就会有多个线程同时在执行了,这样可以极大的提高运行性能

6.2 线程的基本概念

image.png

线程的属性

  • 有标识符ID
  • 有状态及状态转换-->需要提供一些操作
  • 不运行时需要保存的上下文(程序计数器等寄存器)
  • 有自己的栈和栈指针
  • 共享所在进程的地址空间和其他资源
  • 创建、撤销另一个线程(程序开始是以一个单线程方式运行的)


6.3 线程机制的实现

一般有三种实现机制

  • 用户级线程
  • 核心级线程
  • 混合(两者结合)方法6.3.1 用户级线程

image.png

说明:线程是由运行时系统管理的,在内核中只有进程表。典型例子就是UNIXundefinedPOSIX线程库–PTHREAD

image.png

优点

  • 线程切换快
  • 调度算法是应用程序特定的
  • 用户级线程可运行在任何操作系统上(只需要实现线程库)


缺点

  • 内核只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上
  • 大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞。(可以在调用之前判断进行解决,如果是阻塞线程,那么就换其他线程)6.3.2 核心级线程


image.png

  • 线程创建在用户空间完成
  • 线程调度等在核心态完成
  • 例子如Solaris操作系统


6.4 线程状态(Java)

0)新建:创建后尚未启动的线程处于这种状态。

1)运行:包括了 OS 中 Running 和 Ready 状态,也就是处于此状态的线程可能正在运行,也可能正在等待 cpu 为它分配执行时间

2)无限期等待:处于这种状态的线程不会被分配 cpu 执行时间,要等待其他线程显示唤醒。以下方法会让线程进入无限期等待 :

  • 没有设置 timeout 的 object.wait()
  • 没有设置 timeout 参数的 Thread.join()
  • LockSupport.park()


3)有限期的等待:处于这种状态的线程也不会被分配 cpu 执行时间,不过无需等待被其他线程显示唤醒,而是在一定时间后,他们会由 OS 自动唤醒 1.设置了 timeout 的 object.wait() 方法 2. 设置了 timeout 参数的 Thread.join() 3.LockSupport.parkNanos()


4.LockSupport.parkUnit()


4) 阻塞:与"等待"的区别:

  • 阻塞态在等待获取一个排它锁,这个事件将在另外一个线程放弃这个锁的时候发生
  • 等待状态在等待一段时间或者唤醒动作。


5)结束:已终止线程的线程状态,线程已经结束执行。 进程的通信类型

  • 共享存储器、管道、客户机-服务器系统(socket)
  • 直接通信、间接通信(信箱)



目录
相关文章
|
1月前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
82 0
|
1月前
|
存储 消息中间件 算法
《操作系统》——进程与线程
《操作系统》——进程与线程
|
1月前
|
缓存 Linux Shell
Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)
Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)
52 1
|
2月前
|
Java
操作系统基础:进程同步【下】
操作系统基础:进程同步【下】
|
27天前
|
资源调度 监控 算法
深入理解操作系统:进程管理与调度策略
本文旨在探讨操作系统中进程管理的核心概念及其实现机制,特别是进程调度策略对系统性能的影响。通过分析不同类型操作系统的进程调度算法,我们能够了解这些策略如何平衡响应时间、吞吐量和公平性等关键指标。文章首先介绍进程的基本概念和状态转换,随后深入讨论各种调度策略,如先来先服务(FCFS)、短作业优先(SJF)、轮转(RR)以及多级反馈队列(MLQ)。最后,文章将评估现代操作系统在面对多核处理器和虚拟化技术时,进程调度策略的创新趋势。
|
1月前
|
安全 算法 网络安全
深入理解操作系统之进程调度策略网络安全与信息安全:防御前线的关键技术与策略
【2月更文挑战第29天】在多任务操作系统中,进程调度策略是核心机制之一,它决定了CPU资源的分配。本文将探讨三种经典的进程调度算法:先来先服务(FCFS)、短作业优先(SJF)和轮转调度(RR)。通过比较它们的优缺点,我们可以理解不同场景下的性能考量,以及如何根据实际需求选择合适的调度策略。 【2月更文挑战第29天】在数字化时代,网络安全和信息安全已成为维护信息完整性、确保数据隐私以及保障网络服务连续性的重要组成部分。本文将深入探讨网络安全漏洞的概念、加密技术的应用以及提升个人和企业安全意识的重要性。通过分析当前网络威胁的类型和特点,文章旨在为读者提供一系列针对网络攻击的预防措施和应对策略,
|
1天前
|
算法 Linux 调度
深入理解操作系统中的进程调度策略
【4月更文挑战第25天】 在多任务操作系统中,进程调度策略是核心组件之一,它负责决定哪个可运行的进程将获得CPU时间。本文将探讨不同的进程调度算法,包括它们的原理、优缺点以及适用场景。我们将重点分析先到先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)和多级反馈队列(MLFQ)等经典算法,并讨论现代操作系统如Linux和Windows中的实际调度策略。文章的目的是为读者提供对操作系统进程调度机制深度了解,并展示其在系统性能和用户体验中的关键作用。
|
1天前
|
负载均衡 算法 调度
深入理解操作系统中的进程调度策略
【4月更文挑战第25天】 在现代操作系统的核心功能中,进程调度策略扮演着至关重要的角色。本文将详细解析进程调度的基本概念、调度算法的种类及其背后的原理,并探讨它们对系统性能的影响。通过比较不同的调度策略,我们可以更深入地理解操作系统如何管理资源,确保多任务环境下的效率和公平性。
|
18天前
|
算法 Linux 调度
深入理解操作系统的进程调度策略
【4月更文挑战第8天】本文深入剖析了操作系统中的关键组成部分——进程调度策略。首先,我们定义了进程调度并解释了其在资源分配和系统性能中的作用。接着,探讨了几种经典的调度算法,包括先来先服务(FCFS)、短作业优先(SJF)以及多级反馈队列(MLQ)。通过比较这些算法的优缺点,本文揭示了它们在现实世界操作系统中的应用与局限性。最后,文章指出了未来进程调度策略可能的发展方向,特别是针对多核处理器和云计算环境的适应性。
|
19天前
|
算法 调度 UED
深入理解操作系统中的进程调度策略
【4月更文挑战第7天】 在多任务操作系统中,进程调度策略是决定系统性能和响应速度的关键因素之一。本文将探讨现代操作系统中常用的进程调度算法,包括先来先服务、短作业优先、轮转调度以及多级反馈队列等。通过比较各自的优势与局限性,我们旨在为读者提供一个全面的视角,以理解如何根据不同场景选择合适的调度策略,从而优化系统资源分配和提升用户体验。