- 博客(11)
- 问答 (2)
- 收藏
- 关注
翻译 Three easy pieces 第一部分(8) Multiprocessor Scheduling
欢迎来到多核的时代。首先什么是多核,就是因为单核的速度无法提升,所以只能以增加核心的方式来提升cpu 的速度。而且需要注意的是每个核心都有对应的缓存,所以这个会导致缓存不一致的情况。另外还需要考虑的就是并发的问题,这个可以通过加锁机制来完成。另外对于多核来说,会带来一个新的问题,那就是缓存关联性(Cache Affinity)。也就是说,如果一个进程如果能够一直运行在一个核上,那么就可以利用高速缓...
2018-05-28 16:15:24 221
翻译 Three easy pieces 第一部分(6) Scheduling: The Multi-Level Feedback Queue
这一章对新的调度策略MLFQ进行讲解。1.MLFQ的的规则 我们会有一些队列,不同的队列对应不同的优先级.对于队列中的进程,调度的规则如下: (1)如果Priority(A) > Priority(B),那么A运行。 (2)如果Priority(A) = Priority(B),那么A,B按照Round-Robin方式运行。 (3)当一个任务创立的是时候,它在最高的优...
2018-05-28 16:03:08 774
翻译 Three easy pieces 第一部分(5) Scheduling: Introduction
这一章主要是介绍几个简单的调度器策略。内容比较简单,就简单汇总下。首先我们对现有的计算机环境有如下几个假设:1.每个job都运行相同的时间。2.所有的job都同时到达3.一旦一个job启动,那么他就会一直运行到结束。4.所有的job不会有I/O5.每个job运行的时间都是可知的。我们先引入一个效率的测量值:turnaround timeTturnaround = Tcompletion − Tar...
2018-05-28 16:01:22 350
翻译 Three easy pieces 第一部分(4) Mechanism: Limited Direct Execution
1.如果直接让程序直接运行在没有OS干涉的硬件上,会有什么问题?这个是书中给出的直接运行的流程图,会带来如下的问题: (1)怎么限制程序的行为,因为一个程序不能肆无忌惮的对硬件进行操作。 (2)怎么切换进程呢?2.怎么让程序执行的行为得到控制? cpu的状态分为user mode和kernel mode。在user mode下,很多指令是无法执行的,比如对于DISK的操作。 OS提供s...
2018-05-28 15:59:28 527
翻译 Three easy pieces 第一部分(2) The Abstraction: The Process
这一章引入了process的概念。虚拟化cpu是通过time sharing的方式来进行的,
2018-05-28 15:56:52 145
翻译 Three easy pieces 第一部分(1) Introduction to Operating Systems
一个程序在运行的时候发生了什么呢?其实只是一些非常简单的事情:运行指令。处理器从内存中取出指令,译码然后执行。这条指令执行完毕后就又去执行新的指令,一直这样继续下去,直到程序执行完毕。这里,我们所描绘的就是计算机的基本模型-冯诺依曼模型。听起来很简单不是吗?但是在这个课堂上,我们将学习程序在运行的时候,其他的一些不一样的知识,这些知识能够让系统更加的好用。有一个软件,它负责让你更容易的运行程序(甚...
2018-05-28 15:55:52 190
原创 Three easy pieces 第二部分(2)
1.如何评价构造的lock? (1)功能性。就是你这个lock到底能不能有效果。 (2)公平性。你不能让某个thead永远获取不到lock (3)效率。对于只有一个thread的情况不能因为锁代码导致效率变低。分别对于单核和多核的情况,锁的获取和释放的效率如何2.如果构造lock? (1)停止中断 (2)Test-and-Set。硬件提供原子性的操作,从而可以构成...
2018-05-22 18:09:09 372
原创 关于虚拟存储器和高速缓存的理解
对于csapp中的高速缓存和虚拟存储器章节做个总结,这些可以帮助我更好的理解java中的NIO以及并发。先记录下一些名称的英文缩写:PP(physical page)物理页VP (virtual page)虚拟页VA (Virtual Address)虚拟地址 VPO(虚拟页面偏移)+VPN(虚拟地址页号)+TLBI(TLB索引)+TLBT(TBL标记)
2017-05-25 09:51:26 2446
原创 关于java的future和Executor接口的理解
在创建线程的方法中,一种是实现Runnable接口的方式,但是这种方式是没有办法获取返回值和捕获异常的,所以这里来说说可以让线程返回执行结果的Future,Callable,Executor接口。首先说下Callable接口,这个接口只有一个方法如下:public V call();和Runnable不同的是,Thread类不会接受一个Callable接口的实现来实现一个线程,而是需要
2017-05-24 16:51:36 363
原创 关于ReentrantLock类的解读
synchronized关键字提供了语言级别的并发支持,通过这个关键字,标明了可能会产生竞态代码的区域,这样多线程调用的时候就会保证同一时间只有 一个线程可以进入,消除了多线程的问题. 但是用synchronized关键字实现的并发是很重量级别的,因为没有获取到对应锁的线程会阻塞,如果要运行就需要调度,这会涉及到内核的 线程调度,这块的消耗是很大的,可能调度的时间会比你实际代码运行的时
2017-05-22 09:02:28 678
空空如也
java多线程问题,java 编程思想书中的例子
2015-11-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人