cpu时间

千峰逆战班 Day28生存日记

主宰稳场 提交于 2020-03-12 05:15:47
Question12 2020.3.11 1.一个单CPU的机器,如何同时执行多个线程? 单CPU在任何时间点上,只能运行一个进程,宏观并行、微观串行。单CPU单核中线程只能并发,单CPU多核中线程可以并行。 2. 3.C 4.A 5. 6.加入synchronized使得线程安全,只有拥有互斥锁标记的线程,才能进入对该对象加锁的同步代码块。线程退出同步代码块时,释放了相应的互斥锁标记。其他线程才可执行。 没有加入时,线程同时抢占CPU资源,输出的结果会不连续。 7.C 课堂案例 来源: CSDN 作者: weixin_42043566 链接: https://blog.csdn.net/weixin_42043566/article/details/104804773

Windows Internals 笔记——线程调度

孤街浪徒 提交于 2020-03-12 03:25:22
1.线程内核对象中的CONTEXT反应了线程上一次执行时CPU寄存器的状态。大约每隔20ms,Windows都会查看所有当前存在的线程内核对象。Windows在可调度的线程内核对象中选择一个,并将上次保存在线程上下文中的值载入CPU寄存器。这一操作被称为上下文切换。Windows实际上会记录每个线程的运行次数。 2.调用CreateProcess或者CreateThread时,系统将创建线程内核对象,并把挂起计数初始化为1。这样就不会给这个线程调度CPU了,因为线程初始化需要时间,我们不想再线程准备好之前就开始执行它。在线程初始化之后,CreateProcess或者CreateThread函数将查看是否有CREATE_SUSPENDED标志传入,如果有,函数返回并让新的线程处于挂起状态。如果没有,函数会将线程的挂起计数递减为0,线程就成为可调度的了。 3.通过创建一个处于挂起状态的线程,我们可以在线程执行任何代码之前改变它的环境(比如优先级)。之后可以调用ResumeThread函数使其变为可调度的,如果调用成功会返回线程的前一个挂起计数,否则返回0xFFFFFFFF。 4.还可以调用SuspendThread来挂起线程,任何线程都可以调用这个函数挂起另外一个线程(只要有线程句柄)。显然线程可以将自己挂起,但是它无法自己恢复。SuspendThread返回线程之前的挂起计数

计算机组成原理学习笔记——主存和CPU连接

坚强是说给别人听的谎言 提交于 2020-03-11 19:51:33
主存和CPU的连接 1、连接原理 2、主存容量扩展技术 2.1、位扩展法 2.2、字扩展法 1.3、字位同时扩展 3、存储芯片的地址分配与片选 3.1、线选法 3.2、译码片选法 4、搭建主存系统 4.1、选取存储芯片 4.2、地址线连接方式 4.3、数据线连接方式 4.4、控制命令线连接方式 4.5、片选线连接方式 1、连接原理 1)主存通过数据总线、地址总线和控制总线与CPU连接。 2)数据总线的位数与工作频率的乘积正比于数据传输率。 3)地址总线的位数决定了可寻址的最大内存空间。 4)控制总线(读/写)指出总线周期的类型和本次输入/输出操作完成的时刻。 主存和 CPU 连接方式大致如下图: 2、主存容量扩展技术 CPU 的数据线数与存储芯片数据位数不一定相等,通常进行位扩展,用多个存储芯片对字长进行扩充,使数据位数与 CPU 的数据线数相等。可用的技术方法有位扩展法、子扩展法和字位同时扩展法。 2.1、位扩展法 位扩展就是将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出, 如图将 8 片 8K 1 位芯片组成 8K 8 位芯片组,所有芯片的地址线、片选信号线以及命令信号线都分别连在一起,而每片的数据线作为 CPU 数据线的一位。 注意: 仅采用位扩展时,各个芯片连接地址线的方式一样,而连接数据线的方式不一样,某一时刻选中所有芯片

单核CPU、并行、进程、线程、纤程、协程出现必要性解析

懵懂的女人 提交于 2020-03-11 16:51:20
并发/并行 从物理基础元素角度来看,当只有一个CPU时,执行一个程序这个程序就会一直占用CPU,直到程序运行结束。 如果这个程序的运行过程中,需要用到CPU的部分很快就结束了,程序的其他环节(比如IO阻塞等)正在占用时间,此时CPU是空置的。 于是就有了并发。 并发的不足 并发执行加速了对CPU的使用效率,也带来了问题。 程序A运行到一半,程序B进来抢占CPU,程序A的 中间状态 /内存/变量怎么办? 因此,在同一个CPU里的并发需要处理好 上下文切换 的问题。 进程的出现 让CPU处理两个程序,就像男女结婚一样。两人结婚并不是两个人凑在一起过日子,而是两个家庭在进程资产重组。不是丈夫+妻子,而是丈夫+妻子and丈夫+岳父and丈夫+岳母and妻子+婆婆… 将计算主业及所需附属等整合在一起抽象出来的概念,就叫进程。 这个概念能够独立运行。涉及到大量计算机资源的配置,如果任由用户程序配置,太过复杂也会冲突。 因此就出现了 操作系统 。 操作系统直接跟底层资源配置打交道,用户程序只需要跟操作系统打交道就行了。 上下文切换(Context Switch) 上下文切换主要是指进程的上下文切换,发生在内核态,由内核调度器执行。 上下文,指的是进程的运行状态。 当一个进程的时间片用完,内核将保存该进程的运行状态(即上下文),将其存入运行队列(Run Queue),同时让新的进程占用CPU。

Linux 问题故障定位,看这一篇就够了

一世执手 提交于 2020-03-11 04:00:57
目录 1. 背景 2. 说明 3. 分析问题的方法论 4. cpu 4.1 说明 4.2 分析工具 4.3 使用方式 5. 内存 5.1 说明 5.2 分析工具 6. 磁盘IO 6.1 说明 6.2 分析工具 6.3 使用方式 7. 网络 7.1 说明 7.3 使用方式 8. 系统负载 8.1 说明 8.2 分析工具 9. 火焰图 9.1 说明 9.2 安装依赖库 9.3 安装 9.4 CPU级别火焰图 9.4.1 on-CPU 9.5 内存级别火焰图 9.6 性能回退-红蓝差分火焰图 10. 案例分析 10.1 接入层nginx集群异常现象 10.2 分析nginx相关指标 10.3 分析系统cpu情况 10.4 火焰图分析cpu 10.5 案例总结 11.参考资料 1. 背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情。 2. 说明 本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题。 3. 分析问题的方法论 套用5W2H方法,可以提出性能分析的几个问题 ●

进程、线程、协程之概念理解+线程和进程各自有什么区别和优劣

给你一囗甜甜゛ 提交于 2020-03-10 06:09:31
一、概念 首先,根据图了解一下串行,并行和并发的基本概念:   1、进程    资源分配的基本单位 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 Linux系统函数fork()可在父进程中创建一个子进程,在父进程接到新请求时,复制出一个子进程来处理,即父进程监控请求,子进程处理,实现并发处理。注意:必须是Linux系统,windows不能用fork。 组成 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。 特征 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的

Interview_操作系统_day21

為{幸葍}努か 提交于 2020-03-09 21:45:12
并发和并行 并发: 同一时刻只能运行一条指令。在宏观上看起来是多个程序同时运行,但微观上是多个程序的指令交替着运行的。并发不能提高计算机的性能,只能提高效率。 并行: 同一时刻可以运行多条指令。无论从宏观还是微观,都是一起执行的。比如多核 \(cpu\) ,多个程序分别运行在不同的核上,互不影响。并行确实提高了计算机的效率。 用户态和内核态区别 操作系统两种 \(CPU\) 状态: 核心态:运行操作系统程序 用户态:运行用户程序 操作系统的指令划分: 特权指令:只能由操作系统使用,用户不能使用的指令。 非特权指令:用户程序可以使用的指令。 特权级: \(R0、R1、R2、R3\) \(R0\) 相当于内核态, \(R3\) 相当于用户态 不同的特权级别可以运行不同的指令 区别: 内核态和用户态是操作系统的两种运行级别。用户态拥有最低的特权级,核心态拥有较高的特权级。 处于用户态时,进程能够访问到的内存空间和对象受到限制,其所占有的处理机是可以被抢占的。 处于内核态时,进程能够访问所有的内存空间和对象,且所占有的处理机是不可以被抢占的。 操作系统为什么要分内核态和用户态 为了安全。在 \(cpu\) 中,如果有些指令用错会使系统崩溃,所以用户程序是不可信的,无论程序员是否有意,都可能把系统弄崩溃。 分了内核态和用户态之后,操作系统对内核级别指令进行封装,然后为用户提供系统服务

docker概述

我的未来我决定 提交于 2020-03-09 20:02:59
虚拟化: varmvare,virtualbox docker:container技术(以内核为支撑进行虚拟机)。不用安装操作系统直接通过宿主机的os虚拟化出应用 Docker 是一个 开源 的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现 虚拟化 。容器是完全使用 沙箱 机制,相互之间不会有任何接口; 一个完整的Docker有以下几个部分组成: dockerClient客户端 Docker Daemon守护进程 Docker Image镜像 DockerContainer容器 起源 Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于 go语言 并遵从Apache2.0协议开源。 Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是 Redhat 在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。 一款开源软件能否在商业上成功,很大程度上依赖三件事 - 成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 自家的 PaaS 产品建立在 docker 之上,长期维护且有大量的用户

线程的上下文切换

て烟熏妆下的殇ゞ 提交于 2020-03-09 15:34:30
CPU利用时间片轮询来为每个任务都服务一定的时间,然后把当前任务的状态保存下来,继续服务下一个任务。任务的状态保存及再加载就叫做线程的上下文切换。 在一个进程内部可以有多个线程在同时运行,并与创建它的进程共享同一地址空间和其它资源。 上下文:批线程切换时CPU寄存器和程序计数器所保存的当前线程的信息。 寄存器:指CPU内部容量较小但速度很快的内存区域(与之相对应的是CPU外相对较慢的RAM主内存)。寄存器通过对常用值(常为运算的中间值)的快速访问来加快计算机程序的速度。 程序计数器:是一个专用的寄存器,用于表明指令序列中CPU正在执行的位置,存储的值为正在执行的指令的位置或下一个将被执行的指令的位置,这依赖于特定的系统。 上下文切换 上下文切换指的是内核(OS的核心)在CPU上对进程或线程进行切换。上下文切换过程中的信息被保存在 进程控制块 (PCB ,Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中。直到被再次使用。上下文切换流程如下: (1)挂起一个进程,将这个进程在CPU中的状态(上下文信息)存储于内存的PCB中。 (2)在PCB中检索下一个进程的上下文并将其在CPU的寄存器中恢复。 (3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码),并恢复该进程。

Intel x86_64 Architecture Background 2

纵然是瞬间 提交于 2020-03-09 08:01:00
  这里是在学习Intel x86_64体系架构时学习到的一些概念,记录下来以供日后参考。如果有错的地方,欢迎指正! CPU上下文切换(context switch):    这个概念第一次听到对我来说是完全陌生的,但了解之后发现和老师讲的东西有很多联系。现在 linux 是大多基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个任务,这个过程叫做 上下文切换 。时间片轮转的方式,使得多个任务利用一个CPU执行成为可能,但是保存现场和加载现场,也带来了性能消耗。 缓存一致性协议:   在多核系统中,各个核的cache存储相同变量的副本,当一个处理器更新cache中该变量的副本时会造成各个核之间的缓存不一致,这就是缓存一致性问题。我们要保证在一个核的缓存更新时,其他处理器应该知道该变量已更新,即其他处理器中cache的副本也应该更新,需要使用缓存一致性协议。 CPU处理输入输出的简要过程: 进程内存分配映射方式:   通过地址转换单元,让每个设备都像拥有了一块独立的DRAM。地址转换单元将虚拟地址转化为物理地址(页到页的模式)。 地址映射基本思想 页到页的映射 在多个操作系统同时工作下的地址映射 超线程技术:   尽管提高CPU的时钟频率和增加缓存容量后的确可以改善性能,但这样的CPU性能提高在技术上存在较大的难度