cpu接口

java面试题

混江龙づ霸主 提交于 2019-12-16 13:12:43
1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: 1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题

输入输出接口

早过忘川 提交于 2019-12-12 12:48:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 输入输出接口 常见的I/O接口: 南桥(现在叫 PCH )、显卡 I/O接口 作用: 数据缓冲 解决CPU和外设之间的速度差距 提供联络信息 协调与同步数据交换过程 信号与信息格式的转换 模/数、数/模转换,串/并、并/串转换,电平转换 设备选择 中断管理 可编程功能 通讯: 需要“握手( Handshaking )信号”:总是成对出现,在数据传送中起着定时协调与联络作用。采用“握手”方式的数据传送,每一过程必须都有应答,彼此进行确认。 输出:并行数据输出(外设>IO接口)、输出准备好(外设>IO接口)、输出回答(IO接口>外设) 输入:并行数据输入(IO接口>外设)、输入准备好(IO接口>外设)、输入回答(外设>IO接口) 直接存储器访问,Direct Memory Access ( DMA ),辅助CPU, 控制 I/O接口 与 存储器 特点: 数据传送过程不需要CPU干预(不需要执行程序指令) 由专门硬件控制电路控制,进行外设与存储器间直接数据传送 该专门硬件控制电路称为DMA控制器,简称 DMAC 自带DMA控制器:网卡、显卡、声卡、硬盘 输入输出的控制方式 I/O控制方式: 指的主机与外设之间的数据传送控制方式 程序(指CPU)控制方式 1、无条件传送方式 假定外设已经准备好

s3c2440裸机编程-内存控制器(一、内存接口概念)

痴心易碎 提交于 2019-12-09 13:26:56
1.内存接口概念 S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nand控制器等... 1.不同类型的控制器: (1)GPIO控制器属于门电路,不涉及到时序,相对简单。 (2)串口控制器属于协议类接口,类似的协议类接口还有iic、iis、spi等。 (3)前面的GPIO/门电路接口、协议类接口,都不会把地址输出到外部设备,仅仅只是将地址写入到相应的控制器。 接下来的内存类接口,会把地址输出到外部,cpu将地址写入内存控制器,内存控制器还需访问外部设备,比如NorFlash、网卡、SDRAM。 2.CPU是如何访问各个不同的寄存器的呢? GPIO/门电路接口、协议类接口、内存类接口都属于CPU的统一编址。但对于Nand Flash,它没有独立的地址线和cpu的地址总线相连接,因此它不参与CPU的统一编址。 (1)对于门电路接口、协议类接口,直接访问寄存器即可。 (2)对于内存类接口,交给内存控制器去处理。下面详细分析: CPU只管发出一个地址,内存控制器根据该地址范围选择不同的模块,然后从模块中得到数据或者发送数据到模块中。 如下图,SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去

多线程

大兔子大兔子 提交于 2019-12-09 12:16:51
我们在之前,学习的程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏 边听歌,怎么设计? 要解决上述问题,咱们得使用多进程或者多线程来解决。 并发与并行 并发 :指两个或多个事件在 同 一 个时间段内 发生。 并行 :指两个或多个事件在 同 一 时刻 发生(同时发生)。 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每 一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上( CPU ),实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核 CPU,便是多核处理器,核 越多,并行处理的程序越多,能大大的提高电脑运行的效率。 注意:单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个 CPU 上并发运行。同理, 线程也是一 样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却是串行运行的,即一个 线程一个线程的去运行,当系统只有一个CPU 时,线程会以某种顺序执行多个线程,我们把这种情况称之为 线程调度。 线程与进程 进程 :是指一个内存中运行的应用程序

案例分析:设计模式与代码的结构特性

大兔子大兔子 提交于 2019-12-07 00:47:26
一、模式的定义与特点 1. 抽象工厂模式   抽象工厂模式是工厂方法模式的进一步延伸,由于它提供了功能更为强大的工厂类并且具备较好的可扩展性,在软件开发中得以广泛应用,尤其是在一些框架和API类库的设计中,例如在Java语言的AWT(抽象窗口工具包)中就使用了抽象工厂模式,它使用抽象工厂模式来实现在不同的操作系统中应用程序呈现与所在操作系统一致的外观界面。抽象工厂模式也是在软件开发中最常用的设计模式之一。   抽象工厂(Abstract Factory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。   抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。   使用抽象工厂模式一般要满足以下条件:   (1)系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。   (2)系统一次只可能消费其中某一族产品,即同族的产品一起使用。 2.主要优点   抽象工厂模式的主要优点如下:   (1)抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。   

面试:史上最全多线程面试题 - (锁&内存模型&线程)

一个人想着一个人 提交于 2019-12-06 23:14:33
多线程经典面试题60问。 历史文章: dubbo&zookeeper55道高频面试题(附加答案) SpringCloud&SpringBoot经典面试题(附加答案) 1.什么是活锁、饥饿、无锁、死锁? 死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现 了这三种情况,即线程不再活跃,不能再正常地执行下去了。 死锁 死锁是多线程中最差的一种情况,多个线程相互占用对方的资源的锁,而又相互等 对方释放锁,此时若无外力干预,这些线程则一直处理阻塞的假死状态,形成死锁。 举个例子,A 同学抢了 B 同学的钢笔,B 同学抢了 A 同学的书,两个人都相互占 用对方的东西,都在让对方先还给自己自己再还,这样一直争执下去等待对方还而 又得不到解决,老师知道此事后就让他们相互还给对方,这样在外力的干预下他们 才解决,当然这只是个例子没有老师他们也能很好解决,计算机不像人如果发现这 种情况没有外力干预还是会一直阻塞下去的。 活锁 活锁这个概念大家应该很少有人听说或理解它的概念,而在多线程中这确实存在。 活锁恰恰与死锁相反,死锁是大家都拿不到资源都占用着对方的资源,而活锁是拿 到资源却又相互释放不执行。当多线程中出现了相互谦让,都主动将资源释放给别 的线程使用,这样这个资源在多个线程之间跳动而又得不到执行,这就是活锁。 饥饿 我们知道多线程执行中有线程优先级这个东西

linux内核线程的创建与销毁

十年热恋 提交于 2019-12-06 10:44:22
linux将创建内核线程的工作交给了一个专门的内核线程kthreadd来完成,该线程会检查全局链表kthread_create_list,如果为NULL,就会调schedule()放弃cpu进入睡眠状态,否则就取下该链表中的一项创建对应的线程。本文就从khtreadd内核线程的创建开始来展示一下内核线程的创建过程。 1 kthreadd linux2.6.30,创建内核线程是通过kethradd内核守护线程来完成的,虽然机制上有所变化,但是最终还是调用do_fork来完成线程的创建。Kthreadd守护线程是在linux内核启动时就已经创建的内核线程。在start_kernel调用的结束位置,会调用rest_init接口,而kthreadd就是在这个接口中创建的,代码如下所示: asmlinkage void __init start_kernel(void) { 。。。。。。。。。。。。。。。。。。。。。。 rest_init(); } static noinline void __init_refok rest_init(void) __releases(kernel_lock) { int pid; /*在启动时创建内核线程,该线程主要用来创建内核线程*/ pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);

记一次CPU使用%100问题排查

元气小坏坏 提交于 2019-12-06 04:27:06
需求   前端同事说测试环境的服务接口查起来很慢,很不稳定,不是个别接口,而是大量接口。 情况分析   由于是在测试环境联调,没有多少用户量。所以第一步:先去服务器看看资源的使用情况。使用top命令,查看cpu的使用情况。   看图可以发现,有一个ID为2883的Java进程,导致CPU使用率达到百分之百。   第二步:根据进程ID找对应的Java项目。可以用ps -ef|grep java命令。   第三步:找对应对应项目日志排查原因。发现上传了一个视频文件过大导致。   第四步:kill -9 进程号,把项目关掉重启即可。 来源: https://www.cnblogs.com/maguanyue/p/11961783.html

接口技术第六章——输入输出接口及数据传输控制方式总结

老子叫甜甜 提交于 2019-12-06 04:14:53
正在学习接口技术和计算机组成原理,中间有一些重叠的部分就放在一起了,至于DMA,中断之类的会放在后面讲解 6.1 接口综述 硬件接口通常称为I/O接口,把外围设备同微型计算机连接起来的电路称为外设接口电路,简称外设接口。I/O接口是CPU同外界进行信息交换的中转站 使用接口的原因 速度不匹配 外设外慢 时序不匹配 各个外部设备都有自己的定时控制电路,以自己的速度进行传输,同CPU的时序不匹配 信息格式不匹配,不同的外设存储和处理信息的格式不同 信息类型不匹配,有些是数字电路,有些是模拟电路 CPU与外设之间所传送的数据类型 数据信息 包括模拟量,数字量,开关量,可以输入也可以输出 状态信息 这是I/O端口送给CPU的有关本端口所对应的外设当前状态的信息,供CPU参考分析 控制信息 这是CPU送给I/O设备的控制命令,使相应的外部设备完成特定的操作 在8086/8088中,这三种信息的输入输出基本一致,可以分发不同的端口地址,在端口地址相同的情况下,可以规定操作的顺序,或者在输入输出的数据中设置特征位 接口的功能(背) 执行CPU命令 CPU将对外设的控制命令发到接口电路的命令寄存器中,以便控制外设按要求进行工作 返回外设状态 通过外设寄存器(状态口)完成,包括正常工作状态和故障状态 数据缓冲的功能 (平滑作用)接口电路中的数据寄存器(数据口)对CPU与外设设备之间的数据进行中转

【转载】Linux中的buffer和cache

匿名 (未验证) 提交于 2019-12-02 21:59:42
看到一篇讲解Linux中有关buffer和cache的文章,内容很不错,顺手粘过来了原文地址: https://www.cnblogs.com/M18-BlankBox/p/5326484.html 对于一个即将踏上“系统运维”或者更加高大尚的工作“系统调优”,如果这不跟这两哥们搞好关系了,坑的不只有内存,更坑的是你拿着调优的钱却干着随时被调的活。因为作为一个系统运维人员来说监控和优化IO性能这是最有可能你生存下来的技能,为啥呢?因为你不仅给老板省了钱,还提高了机器的工作效率。。虽然钱都进了老板兜里,但你渐渐地植入了他深深地脑海里,总有一天你比钱重要!好了闲话少扯,接下来说说这两个哥们到底是什么?   之前我自己也对到底buffer和cache是什么,有什么不同,什么时候用buffer,什么时候用cache存在疑惑,不能说不知道,只是别人问起来说起来,我知道,但是讲讲他们的区别,还真是说不出来。无奈查了好多资料,要么太底层要么含糊不清,学术再权威再有见地,让读者理解不了也白搭,这就跟一个牛逼的程序,你再怎么运行在内核空间,但如果你不提供一个用户空间的接口,用的人不能通过一种调用接口认识你,那说明你确实牛,牛到使用的人不知道你是什么。服务的最终是面向用户的,你天天说些机器语言,你真的快乐吗?所以我谈谈我自己对buffer和cache的理解 ,希望能帮到一部分人