操作系统笔记之进程与线程

发布时间:2020-08-05 20:28:16 作者:hiubuntu
来源:网络 阅读:1428

背景

操作系统设计的7个主题:
1. 进程描述和控制
2. 内存管理
3. 调度
4. I/O和文件管理
5. 并发和分布式系统
6. 嵌入式系统
7. 安全

操作系统利用一个或多个处理器的硬件资源,为系统用户提供一组服务,还代表用户来管理辅助存储器和I/O设备。

CPU中断的分类:
1. 程序中断
2. 时钟中断
3. I/O中断
4. 硬件失效中断

DMA:直接内存存取

概述

典型计算机系统的三个重要接口:
1. 指令系统体系结构ISA
2. 应用程序二进制接口ABI
3. 应用程序编程接口API

进程

三个部分:
1. 一段可执行的程序,
2. 程序所需要的相关数据(变量,工作空间,缓冲区等),
3. 程序的执行上下文,又称进程状态。上下文包括操作系统管理进程和处理器正确执行进程所需要的所有信息,包括:

1. 处理器寄存器的内容,2. 进程的优先级

多线程技术

把执行一个应用程序的进程划分成可以同时运行的多个线程。
线程
可分派的工作单元,他包括处理器上下文环境和栈中自己的数据区域。顺序执行,并且可中断。
进程
一个或多个线程和 相关系统资源的集合。

多线程切换涉及的处理器开销比不同进程间切换开销少。

微软

81年基于MS-DOS开发的window 3.0, 雇佣戴夫.卡特勒89年基于VAX/VMS操作系统开发NT内核。

UNix

主要的内核组件的简要介绍:

Linux Vserver

chroot提供文件系统隔离。
chcontext分配一个新的安全上下文,提供进程隔离
chbind把产生的进程及其子进程锁定到一个特定的IP地址,提供网络隔离。
capability,提供根的隔离。

进程

进程可以唯一的表征为以下元素:

进程的五个状态:
- 新建,环境准备,但未进入内存
- 就绪
- 运行
- 阻塞/等待,I/O阻塞,等待资源或另一个进程信息
- 退出
- 针对虚拟内存的:挂起态

操作系统维护四种不同类型的表

Unix的进程状态

Unix中有两个独特进程,进程0是系统启动时创建,预定义的数据结构,是交换进程,启动时进程0产生进程1,进程1称为初始进程。
Unix中创建进程是通过内核系统调用fork()实现的,fork请求时,系统执行以下功能:
1. 为新进程在进程表中分配一个空项。
2. 为紫禁城赋一个唯一的进程标识符
3. 声场一个父进程上下文的逻辑副本,不包括共享内存区
4. 增加父进程所有的文件的计数器
5. 把子进程置为就绪态
6. 向父进程返回子进程的进程号,对子进程返回零。

所有操作在父进程的内核态下完成。

线程

在之前提出的进程概念包含两个特点:

多线程

指在单个进程内支持多个并发执行路径的能力。
进程是操作系统的最小调度单位,线程是CPU的最小调度单位。

线程的优点:

多线程的特性在多处理器机器上才能生效,单处理器中主要简化在逻辑上完成若干项不同功能的程序的结构。

线程的分类

线程可以分为两大类:
1. 用户级线程
2. 内核级县城

操作系统笔记之进程与线程
用户级线程

有关线程管理都有应用程序完成,内核意识不到。任何应用程序都可以使用线程库pthread设计多线程程序。该程序在执行时从但县城开始运行被分配给一内核管理的进程。该程序的线程状态受限于内核进程状态。由此其线程状态也将影响进程状态。
优点:
1. 该程序所有线程在用户地址空间中,无需内核态特权,不需切换状态。
2. 自定义调度算法
3. 跨系统,可移植
缺点:
1. 线程阻塞导致进程阻塞
2. 无法使用多核性能,内核一次只把一个进程分配给一个处理器

内核级线程

所有线程管理都有内核完成。
优点:
1. 同时调度线程到多核处理器
2. 进程中一个线程堵塞时,内核可以调度该进程中另外一个线程
缺点:
1. 把控制从一个线程传到同一个进程的另外一个线程时,需要内核的状态切换。

多核与多线程

多处理器系统中使用线程的例子:

Linux的进程和线程管理

Linux的进程或任务有一个task_struct数据结构表示。包含了以下信息:

进程的执行状态有:

Linux中复制当前进程的属性创建一个新进程。使用clone命令代替fork命令创建进程。没有为线程单独定义数据结构,当两个进程共享相同的虚拟内存时,它们可以当作是一个进程中的线程。clone()调用为每个进程创建独立的栈空间,共享同一内存空间。
当Linux内核执行进程切换时,它将检查当前进程的页目录地址是否和将被调度的进程相同,如果相同,此时上下文切换仅仅是从代码的一处跳到代码的另外一处。

总结

某些操作系统区分进程和线程的概念,前者涉及资源的所有权,后者涉及程序执行。
用户级的线程对操作系统是未知的,它们在用户空间的线程库创建并管理,此时线程的切换不需要状态转换,非常高效,但一个进程一次只有一个用户级线程可以执行,如果某一个线程阻塞,整个进程都被阻塞。
内核级线程由内核维护,由此同一个进程中的线程可以在多个处理器上并发执行,不会被某一个线程阻塞而阻塞整个进程,但当线程切换时需要进行模式转换。


推荐阅读:
  1. LINUX操作系统知识:进程与线程详解
  2. 进程与线程的区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

寄存器 应用程序 处理器

上一篇:使用T-SQL语句操作数据表-更新数据

下一篇:Java虚拟机体系结构

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》