C++11一个重要的特性就是对多线程的支持。 何谓并发 计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。 并发的两种方式: 1.多核处理器,每个任务在自己核心上执行,称为硬件并发,机器能够真正的并行多个任务; 2.单核机器,通过多任务操作系统的切换功能,同时运行多个程序。机器只能在某一时刻执行一个任务,不过它每秒可以执行多次任务切换。因为任务切换的很快,以至于无法感觉任务在何时被暂时挂起,而切换到另一任务,如今仍然称这样的系统为并发, 关系:当应用在多任务切换的环境下和真正并发的环境下执行相比,行为还是有区别的。任务切换在多核处理器上仍然适用。 并发的途径 1.多进程并发——有多个 单线程的 进程 2.多线程并发——单个进程运行多个进程 为什么使用并发 1.为了分离关注点 把不同的关注点分离开来,是处理复杂性的一个原则。通过将相关的代码与无关的代码分离,可使程序更容易理解和测试;同时可使每个线程的逻辑变的更加简单。 2.为了性能 两种方式利用并发提升性能: 继续阅读 >>


杜肖孟 17/03/27 22:35:15
1、进程之间的两种相互制约关系 (1)间接相互制约关系(互斥关系) 同处于一个系统中的进程,通常都共享着某种资源,如共享CPU、共享I/O设备等,所谓间接相互制约即源于这种资源共享,使系统中本来没有关系的进程因竞争资源产生了制约关系。 (2)直接制约关系(同步关系) 这种制约主要源于进程间的合作。比如输入、计算、输出。在运行过程中,某进程可能要在某些同步点上等待另一伙伴(协作进程)为它提供消息,在未获得消息之前,该进程处于等待状态,获得信息后被唤醒进入就绪态,才能被执行。 几个概念: 互斥:两个进程不能同时使用同一资源 死锁:指多个进程互不相让,都得不到足够的资源 饥饿:指一个进程一直得不到资源(其他进程可能轮流占用资源) 2、临界资源和临界区 进程的互斥是由于共享资源而引起的,为了描述这类情况,引入了临界资源和临界区的概念。 临界资源:系统中一次只允许一个进程访问的资源。如I/O设备、共享文件、共享变量等。 临界区:并发执行的进程中,访问临界资源的必须互斥执行的代码段叫临界区。 3、进程同步机制 (1) 继续阅读 >>


杜肖孟 17/03/16 23:36:19
进程概念的引入 进程的概念: 进程是程序的一次执行; 进程是可以和别的计算器并发执行的计算; 可定义为一个数据结构及能在其上进行操作的一个程序; 一个程序及其数据在处理机上顺序执行时所发生的活动; 是程序在一个数据集合上的运行过程﹐是系统进行资源分配和调度的一个独立单位。 综合定义为﹕可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的独立单位。 进程的表示和调度状态 进程的表示:通常由三部分组成 1.程序段:描述进程所要完成的功能,是进程执行时不可修改的部分 2.数据段:程序执行时所需要的数据和工作区,为一个进程专用,可修改 3.PCB:包含进程的描述信息和控制信息,是进程的动态特性的集中反应 PCB:进程控制块 PCB是进程存在的唯一标志,通常PCB包含以下几类信息: 1)进程描述信息 进程标识符PID:是进程的内部标识,用来唯一标识一个进程 进程名:进程的外部标识 2)处理器状态信息—现场信息 由处理器寄存器内容组成: 通用寄存器(8-32个) 指令计数器(下一条指令的地址) 继续阅读 >>


杜肖孟 17/03/15 23:47:53
一:无操作系统 1.手工 特点:(1)用户独占全机(2)CPU等待人工操作 问题:(1)计算机处理能力低(2)计算机工作效率低 2.脱机输入/输出方式 特点:数据的输入输出是在脱离主机的控制下完成的,通常是在外围机的控制下完成的 优点:(1)减少了CPU的空闲时间,缓和了人机矛盾(2)提高了I/O速度 二:单道批处理系统—晶体管 特点:利用磁带将若干个作业分类编成作业执行序列,每个批作业由一个专门的监督程序自动依次处理。 批:供一次加载的磁带或磁盘,通常由若干个作业组装成,在处理中使用相同的系统软件。 批作业组成:用户程序、数据、作业说明书(作业控制语言) 特征:(1)自动性—顺利情况下,磁带上的作业能自动地逐个依次进行(2)顺序性—先调入内存地作业先完成(3)单道性—内存中仅有一道程序运行,当该程序完成或发生异常时,才调入其后继程序进入内存执行 三:多道批处理系统 背景:60年代硬件两重大发展:中断技术和通道技术 中断技术 含义:指CPU在收到外部中断信号后,停止原来工作,转去处理该中断事件,完毕后回到原来断点继续工作。 继续阅读 >>


杜肖孟 17/03/14 23:13:00
硬盘组成 整块磁盘的组成主要有: 圆形的盘片(主要记录数据的部分);机械手臂与机械手臂上的磁头(可读写盘片上的数据);主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据。 盘片上的物理组成: 扇区(sector)为最小的物理存储单位,每个扇区为512bytes;将扇区组成一个圆,那就是柱面,柱面是分区的最小单位; 第一个扇区重要i,里面有硬盘主引导记录(MBR,446字节)及分区表(partition table,64字节)。 接口的磁盘在linux中文件名为: /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名; /dev/hd[a-d][1-63]:为IDE接口的磁盘文件名。 分区 磁盘分区指的是告诉操作系统“我这块磁盘在此分区可以访问的区域是由A柱面到B柱面之间的块”。 因为分区表只有64字节,所以最多只能记录四条分区的记录,我们称之为主分区或扩展分区;扩展分区只能有一个,扩展分区还能再分出逻辑分区;能够被格式化后作为数据访问的分区为主要分区和逻辑分区,扩展分区无法格式 继续阅读 >>


杜肖孟 17/03/04 15:02:17
Linux系统从启动到提供服务的过程是这样,先是机器加电,然后通过MBR或者UEFI加载GRUB,再启动内核,内核启动服务,然后开始对外服务。 步骤: 加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备(比如硬盘); 读取并执行第一个开机装置内MBR 的boot Loader (即grub2, spfdisk 等程序); 依据boot loader 的设置加载Kernel ,Kernel 会开始检测硬件与加载驱动程序; 在硬件驱动成功后,Kernel 会主动调用init进程,而init会取得run-level信息; init 执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络、时区); init 执行run-level的各个服务的启动(script方式); init 执行/etc/rc.d/rc.local 文件; init 执行终端机模拟程序mingetty来启动login进程,最后就等待用户登录。 下面详细介绍每一步程序。 BIOS和MBR都是硬件本身会支持的功能,Boot Loade 继续阅读 >>


杜肖孟 17/03/02 12:33:49
什么是内核模块? 其全称为动态可加载内核模块。之所以提供模块机制,是因为Linux是“单块内核”的操作系统,单内核的最大优点是效率高,因为所有的内容都集中在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。Linux内核是模块化组成的,它允许我们方便地在运行时动态地向内核中插入或从中删除代码。 模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时加载,被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。 特点: 装入的内核模块和其他内核部分完全一样,具有相同的访问权限,因此,差的内核模块会导致系统崩溃; 模块编程和内核版本密切相连,内核版本和模块版本的不兼容,也可能导致系统崩溃; 这些代码被一并组合在一个单独的二进制镜像中,这样基本内核镜像就尽可能的小,而且灵活性很好否则,在需要添加新硬件或者升级设备驱动时,必须重新构建内核。 用户层编程和内核模块编程的区别 选项 应用程序 内核模块程序 使用函数 libc 库 内核函数 运行空间 继续阅读 >>


杜肖孟 17/02/27 20:59:36
不得不说,CSDN在IT界还是非常不错的, 不管是文章数量还是质量,都非常不错,很多程序猿也在CSDN建了窝,那么如何把CSDN的主页设置的更加符合自己的口味,就是我们今天要做的事。 CSDN博客的栏目指的是这块内容: 这里面,有的是CSDN博客自带的内容,比如个人资料、博客专栏等,还有些内容,我们可以自定义,首先,我们需要进入个人的博客首页,点击管理博客,并切换到博客栏目选项卡,这里,就是我们修改自定义栏目的主战场了。 自定义链接 我们首先来看最简单的,增加一个栏目,并增加一些自定义的链接选项。 首先,我们点击添加栏目,如图: 标题就是我们自定义栏目的名字,随便取一个看的顺眼的名字即可。 下面的内容,才是我们的重点,白话文我们就不说了,你可以在内容中输入类似“公告”、“声明”、“通缉”、“悬赏”等等,不用任何修饰的白话文,这些东西, 相信小学毕业证书拿到的朋友应该都会。 那么如何输入带链接的内容呢?几个大字看见没!支持HTML格式!!!有了这几个字,还怕我们有什么做不出吗? OK。上链接: <a title 继续阅读 >>


杜肖孟 16/12/02 23:04:52
最近换了个centos ,可是各种障碍,最近学汇编要装个dosbox,也是遇到几个麻烦。 1. 首先是下载dosbox的包(从学长那拿的=_=) dosbox-0.74 bug 修复版下载: http://download.csdn.net/detail/yangbodong22011/9663271 2. 解压 $ tar zxf dosbox-0.74.tar.gz 3. 进入目录 $ cd dosbox-0.74/ $ ls 4. 检测环境 [root@localhost dosbox-0.74]# ./configure 发现如下错误:`configure: error: *** SDL version 1.2.0 not found!` 接下来执行: [root@localhost dosbox-0.74]# yum -y install SDL [root@localhost dosbox-0.74]# yum install SDL-devel 再次检测,没有其他问题。 5. 编译 [root@ 继续阅读 >>


杜肖孟 16/12/01 15:32:00
内存中字的存储 CPU中,用16位寄存器来存储一个字,一个字要用两个连续的内存单元来存放,这个字的低位字节存放到低地址单元中,高位字节存放在高地址单元中。假如用0、1两个内存单元存放一个字,这两个单元看作一个起始地址为0的字单元。 DS和[address]   8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。比如我们要读取10000H单元中的内容,可用下面的程序段进行:   mov bx,1000H   mov ds,bx   mov al,[0]   上面的3条指令将10000H(1000:0)中的数据读到al中。我们使用mov指令将一个内存单元中的内容送入一个寄存器中,格式为:mov 寄存器名,内存单元地址。寄存器用寄存器名来指明,内存单元则用内存单元的地址指明。[…]中的0表示内存单元的偏移地址,指令执行时,8086CPU自动取ds中的数据为内存单元的段地址。   我们之所以使用 mov bx,1000H 是因为:8086CPU不支持将数据直接送入段寄存器的操作,所以用一个寄存器来进行中转。 CPU提供的栈机制 继续阅读 >>


杜肖孟 16/11/16 22:37:51