操作系统第三篇【线程】

线程概述

进入线程的目的:

程序并发执行所需付出的时空开销,为使程序能并发执行,系统必须进行以下的一系列操作:

  •  (1) 创建进程,系统在创建一个进程时,必须为它分配其所必需的、除处理机以外的所有资源,如内存空间、I/O设备,以及建立相应的PCB;
  •  (2) 撤消进程,系统在撤消进程时,又必须先对其所占有的资源执行回收操作,然后再撤消PCB;
  •  (3) 进程切换,对进程进行上下文切换时,需要保留当前进程的CPU环境,设置新选中进程的CPU环境,因而须花费不少的处理机时间。

引入线程主要是为了提高系统的执行效率,减少处理机的空转时间和调度切换(保护现场信息)的时间,以及便于系统管理。,使OS具有更好的并发性

线程——作为调度和分派的基本单位(取代进程的部分基本功能)

线程与进程

回顾一下进程的基本属性:

  • ①进程是一个可拥有资源的独立单位,
  • ②进程同时又是一个可独立调度和分派的基本单位,

线程与进程的关系:一个进程可以派生出多个线程

  • 线程有3个基本状态:执行、就绪、阻塞。
  • 线程有5种基本操作:
    • 派生、阻塞、激活、 调度、 结束
  • 线程的另一个执行特性是同步。线程中所使用的同步控制机制与进程中所使用的同步控制机制相同

线程的基础

线程有两个基本类型:

  • 1) 用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。
  • 2) 系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行以及撤消线程。

线程的属性:

  • 1)轻型实体;2)独立调度和分派的基本单位;3)可并发执行;4)共享进程资源。 如同每个进程有一个进程控制块一样,系统也为每个线程配置了一个线程控制块TCB,将所有用于控制和管理线程的信息记录在线程控制块中

原文发布于微信公众号 - Java3y(java3y)

原文发表时间:2018-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏代码世界

23种设计模式之单例模式

单例模式    单例模式(Singleton Pattern)是一个比较简单的模式,其定义为:Ensure a class has only one insta...

32514
来自专栏Java面试笔试题

什么是IoC和DI?DI是如何实现的?

IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转...

823
来自专栏Java面试笔试题

举例说明同步和异步

如果系统中存在临界资源(资源数量少于竞争资源的线程数量的资源),例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数...

644
来自专栏JMCui

多线程编程学习一(Java多线程的基础).

一、进程和线程的概念 进程:一次程序的执行称为一个进程,每个 进程有独立的代码和数据空间,进程间切换的开销比较大,一个进程包含1—n个线程。进程是资源分享的最小...

3207
来自专栏jeremy的技术点滴

数据库事务备忘

3064
来自专栏yukong的小专栏

【java并发编程实战5】线程与线程通信

在计算机操作系统,操作系统采用的是时间片轮转法来调度线程的。操作系统会为每个线程分配时间片,当线程的时间片用了,就会发生线程调度,并且等待下次分配,线程分配到的...

632
来自专栏JetpropelledSnake

Python Web学习笔记之进程与线程

要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。     进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系...

2707
来自专栏武培轩的专栏

数据库事务的四大特性以及隔离级别

本篇文章主要介绍数据库事务的四大特性ACID,以及数据库的隔离级别。 事务 概念 事务指的是满足 ACID 特性的一系列操作。在数据库中,可以通过 Commit...

3644
来自专栏人工智能LeadAI

深入理解并发/并行,阻塞/非阻塞,同步/异步

1、阻塞,非阻塞 首先,阻塞这个词来自操作系统的线程/进程的状态模型中,如下图: ? 进程状态 一个线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止。各个...

3674
来自专栏小灰灰

Java并发学习之线程状态及Thread常用方法详解

线程状态及Thread常用方法详解 I. 线程状态 在前面线程创建的一篇博文中,明确说明只有在调用 Thread#start()方法之后,线程才会启动;那线程...

1847

扫码关注云+社区