计算机操作系统基础十二线程同步之自旋锁

引言本文为第十二篇,线程同步之自旋锁,在上一篇文章介绍了互斥量,通过互斥量解决线程同步的问题。本文是另一个解决线程同步的方法---自旋锁 自旋锁自旋锁的工作原理跟互斥量的工作原理其实是一模一样的,它也是在访问临界资源之前加一个锁,完成之后再将锁给释放掉。但是互斥量和自旋锁还是有一点区别的 自旋锁也是一种多线程同步的变量使用了自旋锁的线程会反复检查锁变量是否可用,如果不可用就会循环反复的检查因此自旋锁不会让出CPU,是一种忙等待状态因此自旋锁其实就是:死循环等待锁被释放 自旋锁好处 自旋锁避免了进程或线程上下文切换的开销(如果这个锁占用的时间不是很长,这个代价还是很小的)操作系统内部很多地方都是使用自旋锁,而不是互斥量自旋锁不适合在单核CPU使用(因为自旋锁在等待的时候并不会释放CPU,如果在单核CPU使用的话会引起其它的进程或线程无法执行)自旋锁和互斥量(锁)的比较 自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行两种锁适用的场景 如果是多核处理器,如果预计线程等待锁的时间很短,短到比线程两次上下文切换时间要少的情况下,使用自旋锁是划算的如果是多核处理器,如果预计线程等待锁的时间较长,至少比两次线程上下文切换的时间要长,建议使用互斥量如果是单核处理器,一般建议不要使用自旋锁。因为,在同一时间只有一个线程是处在运行状态,那如果运行线程发现无法获取锁,只能等待解锁,但因为自身不挂起,所以那个获取到锁的线程没有办法进入运行状态,只能等到运行线程把操作系统分给它的时间片用完,才能有机会被调度。这种情况下使用自旋锁的代价很高建议:如果加锁的代码经常被调用,但竞争情况很少发生时,应该优先考虑使用自旋锁,自旋锁的开销比较小,互斥量的开销较大 自旋锁的代码示例 #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>$include<vector>//自旋锁定义pthread_spinlock_t spin_lock;//临界资源int num=0;//生产者void *producer(void*){ int times = 100000000;//循环一百万次 while(times--){ //加自旋锁 pthread_spin_lock(&spin_lock); num += 1;//每次生产一个产品 //解锁 pthread_spin_unlock(&spin_lock); }}//消费者void *consumer(void*){ int times = 100000000; while(times--){ //加自旋锁 pthread_spin_lock(&spin_lock); num -= 1;//每次消费一个产品 //解锁 pthread_spin_unlock(&spin_lock); }}int main(){ printf("Start in main function."); //初始化自旋锁 pthread_spin_init(&spin_lock, 0); //定义两个线程 pthread_t thread1,thread2; //一个执行生成者逻辑,一个执行消费者逻辑 pthread_create(&thread1, NULL, &producer, NULL); pthread_create(&thread2, NULL, &consumer, NULL); pthread_join(&thread1, NULL); pthread_join(&thread2, NULL); //打印临界资源的值 printf("Print in main function: num = %d\n", num); return 0;}执行结果 ...

July 5, 2020 · 1 min · jiezi

计算机操作系统基础十一线程同步之互斥量

引言本文为第十一篇,线程同步之互斥量,在前边的《计算机操作系统基础(四)---进程管理之进程同步》中提到了进程同步和线程同步的方法,本篇为线程同步方法之一---互斥量。建议重新回顾一下《计算机操作系统基础(四)---进程管理之进程同步》这篇文章,方便理解后边的几篇关于线程同步和进程同步的知识 互斥量在进程同步的那篇文章中有介绍到生产者和消费者模型,该模型中有两个线程,分别充当生产者和消费者的角色,在并发的情况下,这两个线程很有可能同时去操作临界资源,如果同时去操作临界资源就有可能造成线程同步的问题,互斥量就是解决线程同步的方法之一 互斥量是如何解决这种问题的? 互斥量是保证当某一个线程,比如说线程1在操作临界资源时,它就可以阻止其它线程访问临界资源,这个就是互斥量的工作原理 在前边的生产者和消费者模型中,引发线程同步的最根本原因其实就是:这两个线程的指令交叉执行,互斥量可以保证两个线程的指令不会交叉的执行 其实互斥量的效果也称为原子性,互斥量其实就是保证了这些关键指令的原子性。原子性就是: 原子性是指一系列操作不可中断的特性这一系列操作要么全部执行完成,要么全部没有执行不存在部分执行,部分未执行的情况就比如刚才的生产者的操作,生产者的操作分为三条指令,根据原子性的特性,这三条指令要么全部执行完成,要么全部未执行,不存在说执行了其中的一条或两条时CPU被抢走了 互斥量是最简单的线程同步方法互斥量(互斥锁),处于两种状态之一的变量:解锁和加锁两个状态可以保证资源访问的串行(如果说一个资源被加锁了,也就是这个资源被某一个线程所使用了,另外一个线程如果想使用这个资源的话,只能等待正在使用这个资源的线程释放资源,另外一个线程才可以使用这个资源,这样就保证了资源访问的串行)互斥锁的代码示例 未使用互斥量 #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>$include<vector>//临界资源int num=0;//生产者void *producer(void*){ int times = 100000000;//循环一百万次 while(times--){ num += 1;//每次生产一个产品 }}//消费者void *comsumer(void*){ int times = 100000000; while(times--){ num -= 1;//每次消费一个产品 }}int main(){ printf("Start in main function."); //定义两个线程 pthread_t thread1,thread2; //一个执行生成者逻辑,一个执行消费者逻辑 pthread_create(&thread1, NULL, &producer, NULL); pthread_create(&thread2, NULL, &comsumer, NULL); pthread_join(&thread1, NULL); pthread_join(&thread2, NULL); //打印临界资源的值 printf("Print in main function: num = %d\n", num);}运行结果: 虽然生产者和消费者循环的次数都是一样的,但是num的运行结果却不是0,这就存在生产者和消费者问题。通过互斥量来解决这个问题 使用互斥量 ...

July 4, 2020 · 1 min · jiezi

计算机操作系统基础十存储管理之虚拟内存

引言本文为第十篇,存储管理之虚拟内存,在正式了解之前,有一个问题,一个游戏十几G,物理内存只有4G,那么这个游戏是怎么运行起来的呢?为了解决这个问题,就需要本篇中介绍到的虚拟内存的知识 虚拟内存概述有些进程实际需要的内存很大,超过物理内存的容量多道程序设计,使得每个进程可用物理内存更加稀缺不可能无限增加物理内存,物理内存总有不够的时候这些原因就促使虚拟内存技术的产生 虚拟内存是操作系统内存管理的关键技术使得多道程序运行和大程序运行成为现实把程序使用内存划分,把部分暂时不使用的内存放置在辅存举例: 左边为进程的逻辑空间,红色部分为一个程序需要使用的内存,操作系统会将内存加载到物理内存中去,灰色的部分为暂时不需要使用的内存,这部分会先放到磁盘中,这样可以节省物理内存,把更多的物理内存让给其它进程使用,并且,在这个里边,如果说这个进程的逻辑空间很大的话,这些很大,且暂时不需要的空间都可以放到磁盘里边暂时保管 程序的局部性原理局部性原理指的是CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。这个原理也是使得虚拟内存技术可以实现的一个原因 因为有局部性原理 所以计算机在加载程序时,无需全部逻辑空间装入内存,装载部分即可(需要使用的部分)如果发现所使用的内存不在物理内存中,则发出缺页中断,发起页面置换,把保存在辅存中的页面置换到物理内存中,这样程序又可以继续运行下去了从用户层面看,程序拥有很大的空间,既是虚拟内存虚拟内存实际上是对物理内存的扩充,速度接近于内存,成本接近于辅存 虚拟内存的置换算法先进先出算法(FIFO)最不经常使用算法(LFU)最近最少使用算法(LRU)高速缓存的替换时机 在高速缓存替换的时候,主要发生在CPU需要获取缓存的时候,发现缓存中没有对应的数据,此时就会发生高速缓存的替换,也就是从主存中载入所需数据 主存页面的替换时机 主存缺页的时候,就会去辅存中加载相关数据,这个时候就会发生主存页面替换 对比来看: 替换策略发生在:高速缓存-主存层次、主存-辅存层次高速缓存-主存层次的替换策略主要是为了解决速度问题主存-辅存层次主要是为了解决容量的问题(这也是存储器存储分层的理由)在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践

July 3, 2020 · 1 min · jiezi

计算机操作系统基础九存储管理之段页式存储管理

引言本文为第九篇,存储管理之段页式存储管理,前边的文章介绍到了存储管理的内存分配和回收,从物理的角度了解了存储管理,本文从进程的角度去了解进程的存储管理。也就是操作系统是如何管理进程的空间 页式存储管理在这之前先来了解页面的概念 在计算机组成原理中有字和字块的概念,字块是相对物理设备的定义(像内存条)。而页面是相对逻辑空间的定义(也就是相对进程空间的定义)。字块和页面都指的是大小一样的一块内存 页式存储管理会将进程逻辑空间等分成若干大小的页面相应的也会把物理内存空间分成与页面大小一样的物理块以页面为单位,把进程空间装进物理内存中分散的物理块中这就是也是存储管理,在了解页式存储管理时,通常会和内存碎片一起来理解 下边是一个空闲链表,假设有一个页面比节点1大,比节点2和节点3小,因此在分配页面时,需要将页面分配到节点2节点3这个节点,因此就会有一部分内存没有被使用,就会造成内存碎片的存在 所以如果使用页式存储管理的话,需要: 页面大小适中,过大难以分配,过小内存碎片过多页面大小通常是512B~8K通过页式存储管理,就可以把进程的逻辑空间的每一个页面都放在内存的物理块中去,但是我们怎么知道进程的某一个页面分配到哪一个字块中去呢?因此需要了解页表 页表记录进程逻辑空间与物理空间的映射 左边是进程的逻辑空间,进程的逻辑空间分成了5个页面,这5个页面是分散在主存的分散的物理块中,因此需要页表记录映射关系: 如果直接使用页式存储管理也会遇到一些问题: 如果有一段连续的逻辑分布在多个页面中,将大大降低执行效率 段氏存储管理将进程逻辑空间划分成若干段(非等分)段的长度由连续逻辑的长度决定主函数main、子程序段X、子函数Y等(这个时候就会根据每一个函数的逻辑的长度去分配逻辑空间)段氏存储管理也需要一个表来存储逻辑空间到物理空间的映射,这个就是段表 每一段的长度都是不固定的,因此段表比页表多一个段长 对比两种存储管理的方法: 共同点: 段氏存储和页式存储都离散地管理了进程的逻辑空间 不同点: 页是物理单位,段是逻辑单位分页是为了合理利用空间,分段是为了满足用户要求页的大小由硬件固定,段的长度可以动态的变化页表信息是一维的,段表信息是二维的段页式存储管理采用了前两种存储管理的优点形成的一种存储管理方法 分页可以有效提高内存利用率分段可以更好满足用户需求段页式存储管理 先将逻辑空间按段氏管理分成若干段再把段内空间按页式管理分成若干页 从左到右分别是段页式、页式、段氏的内存分配情况 在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践

July 2, 2020 · 1 min · jiezi

计算机操作系统基础八存储管理之内存分配与回收

引言本文为第八篇,存储管理之内存分配与回收,早期计算机编程并不需要过多的存储管理,随着计算机和程序越来越复杂,存储管理成为必要。本篇主要是了解内存分配的过程和内存回收的过程 存储管理的意义 确保计算机有足够的内存处理数据确保程序可以从可用内存中获取一部分内存使用确保程序可以归还使用后的内存以供其它程序使用内存分配的过程单一连续分配单一连续分配是最简单的内存分配方式只能在单用户、单进程的操作系统中使用它分配的过程就是把内存分为系统区和用户区 系统区指的是系统区所有的内存都给操作系统区使用,用户区指的是用户区所有的内存都给用户区的程序使用(这种已经是过时的方法) 固定分区分配固定分区分配是支持多道程序的最简单存储分配方式内存空间被划分为若干固定大小的区域每一个分区只提供给一个程序所使用,互不干扰将主存分为若干个分区,每一个分区提供给某一个进程所使用,这就是固定分区的分配方法 动态分区分配根据进程实际需要,动态分配内存空间涉及到相关数据结构和具体的一些算法动态分区空闲表数据结构 假设主存中有若干个分区,有些被使用而有些未被使用,这样就需要一个数据结构去存储某一个分区它是否被使用了,此时就需要空闲表数据结构 在表中有若干个分区,每一个分区都有一个标记,0或1,0表示未被使用,1表示被使用。这就是动态分区空闲表数据结构 动态分区空闲链数据结构 这个是使用双向链表来保存动态分区中的空闲区域。将所有分散的空闲区域,通过链表进行首尾相连,组成一个空闲链表,但是,会存在像下图中空闲区2和3是连续的,因此可以将节点2和节点3给合并起来,这样就可以减少空闲链表的节点。因此,每个节点的大小不一样,所以需要在每个节点里边存储记录这个节点可存储的容量。这个就是动态分区空闲链数据结构 动态分区分配算法 首次适应算法(FF算法)最佳适应算法(BF算法)快速适应算法(QF算法)这些算法是实际进行动态内存分配所使用的算法 首次适应算法(FF算法) 每一次进行内存分配时,从开始顺序查找适合内存区(主要使用空闲链的数据结构)若没有合适的空闲区,则该次分配失败,如果找到了,就将该空闲区划分给这个进程使用。每次都是从头部开始,使得头部地址空间不断被划分 最佳适应算法(BF算法) 最佳适应算法要求空闲区链表按照容量大小排序遍历空闲区链表找到最佳空闲区 将空闲区按照大小进行排序,在需要内存的时候,从节点头部开始遍历,寻找最佳的空闲区节点。这种算法的好处就是可以避免一种大材小用的情况,因为它是从小到大遍历这个空闲链表的,所以它匹配到的第一个合适的空闲区,一定是最佳的。 快速适应算法(QF算法) 快速适应算法要求有多个空闲区链表每个空闲区链表存储一种容量的空闲区 将拥有一个空闲区节点的和拥有两个空闲区节点,分成两个链表。当需要内存分配时,就可以快速的找到适合某一个进程的内存区域。 内存回收的过程内存回收过程,可能有以下几种情况: 回收区和一块空闲区相邻,且回收区在空闲区下边回收区和一块空闲区相邻,且空闲区在回收区下边回收区在两块空闲区中间单独的回收区 每种情况的回收过程回收区在空闲区下边使用空闲链表的数据结构来保存空闲区,不需要新建空闲链表节点、只需要将空闲区1的容量增大为空闲区即可(也就是将回收区包含进来) 回收区在空闲区上边将回收区与空闲区合并新的空闲区使用回收区的地址 回收区位于两个空闲区中间将空闲区1、空闲区2和回收区合并新的空闲区使用空闲区1的地址 单独的回收区为回收区创建新的空闲节点插入到相应的空闲区链表中去 在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践

July 1, 2020 · 1 min · jiezi

真棒-20-张图揭开内存管理的迷雾瞬间豁然开朗

每日英语,每天进步一点点 前言之前有不少读者跟我反馈,能不能写图解操作系统? 既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。 操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。 学操作系统的时候,主要痛苦的地方,有太多的抽象难以理解的词语或概念,非常容易被劝退。 即使怀着满腔热血的心情开始学操作系统,不过 3 分钟睡意就突然袭来。。。 该啃的还是得啃的,该图解的还是得图解的,万众期待的「图解操作系统」的系列来了。 本篇跟大家说说内存管理,内存管理还是比较重要的一个环节,理解了它,至少对整个操作系统的工作会有一个初步的轮廓,这也难怪面试的时候常问内存管理。 干就完事,本文的提纲: 正文虚拟内存如果你是电子相关专业的,肯定在大学里捣鼓过单片机。 单片机是没有操作系统的,所以每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。 另外,单片机的 CPU 是直接操作内存的「物理地址」。 在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,所以同时运行两个程序是根本行不通的,这两个程序会立刻崩溃。 操作系统是如何解决这个问题呢?这里关键的问题是这两个程序都引用了绝对物理地址,而这正是我们最需要避免的。 我们可以把进程所使用的地址「隔离」开来,即让操作系统为每个进程分配独立的一套「虚拟地址」,人人都有,大家自己玩自己的地址就行,互不干涉。但是有个前提每个进程都不能访问物理地址,至于虚拟地址最终怎么落到物理内存里,对进程来说是透明的,操作系统已经把这些都安排的明明白白了。 操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。 如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。 于是,这里就引出了两种地址的概念: 我们程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address)实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Address)。操作系统引入了虚拟内存,进程持有的虚拟地址会通过 CPU 芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存,如下图所示: 操作系统是如何管理虚拟地址与物理地址之间的关系?主要有两种方式,分别是内存分段和内存分页,分段是比较早提出的,我们先来看看内存分段。 内存分段程序是由若干个逻辑分段组成的,如可由代码分段、数据分段、栈段、堆段组成。不同的段是有不同的属性的,所以就用分段(Segmentation)的形式把这些段分离出来。 分段机制下,虚拟地址和物理地址是如何映射的?分段机制下的虚拟地址由两部分组成,段选择子和段内偏移量。 段选择子就保存在段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等。虚拟地址中的段内偏移量应该位于 0 和段界限之间,如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。在上面,知道了虚拟地址是通过段表与物理地址进行映射的,分段机制会把程序的虚拟地址分成 4 个段,每个段在段表中有一个项,在这一项找到段的基地址,再加上偏移量,于是就能找到物理内存中的地址,如下图: 如果要访问段 3 中偏移量 500 的虚拟地址,我们可以计算出物理地址为,段 3 基地址 7000 + 偏移量 500 = 7500。 分段的办法很好,解决了程序本身不需要关心具体的物理内存地址的问题,但它也有一些不足之处: 第一个就是内存碎片的问题。第二个就是内存交换的效率低的问题。接下来,说说为什么会有这两个问题。 我们先来看看,分段为什么会产生内存碎片的问题?我们来看看这样一个例子。假设有 1G 的物理内存,用户执行了多个程序,其中: 游戏占用了 512MB 内存浏览器占用了 128MB 内存音乐占用了 256 MB 内存。这个时候,如果我们关闭了浏览器,则空闲内存还有 1024 - 512 - 256 = 256MB。 ...

June 30, 2020 · 2 min · jiezi

计算机操作系统基础七作业管理之死锁

引言本文为第七篇,作业管理之死锁,死锁是计算机操作系统中非常重要的概念,本文主要介绍什么是死锁以及如何解决死锁 死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 举个例子: 如果这四辆汽车按照如图的方向行驶,堵在十字路口,相互之间没有退让的话,这四辆汽车就形成了死锁。 死锁的产生竞争资源进程调度顺序不当竞争资源 为什么会出现竞争资源? 共享资源数量不满足各个进程的需求各个进程之间发生资源竞争导致死锁举例: 假设有两个进程:进程1和进程2,进程1需要使用传真机,并且已经获取到了传真机资源。进程2需要获取打印机,并且也获取到了。如果此时进程2还需要传真机的时候,或者进程1还需要打印机的时候,他们都需要等待请求的资源被释放,但他们相互之间所占用的资源又不会被释放,因此就造成了死锁的产生,这个就是由于竞争资源而产生的死锁。如果此时多一个传真机或者打印机资源,就不会出现死锁,本质还是因为资源不够 进程调度顺序不当 还是以上边的进程1和进程2为例,假设进程1申请传真机资源为步骤A,进程2申请打印机资源为步骤B,进程2申请传真机资源为步骤C,进程1申请打印机资源为步骤D。如果这两个进程按照A、B、C、D的顺序申请资源,就会产生死锁。如果程序可以把调度顺序改为A、D、B、C,这个时候就不会出现死锁的情况。因为当进程1先获得了传真机资源,然后在获取打印机资源,完成它的工作之后,进程1就会释放这两个资源。这个时候进程2就可以获得打印机和传真机资源了。这个就是因为进程调度顺序不当导致死锁的产生 死锁的四个必要条件 互斥条件请求保持条件不可剥夺条件环路等待条件如果只满足上边的一个或两个的话,不会产生死锁 互斥条件 进程对资源的使用是排他性的使用某个资源只能由一个进程使用,其它需要使用该资源的进程只能等待,等待资源被释放请求保持条件 进程至少持有一个资源,又提出新的资源请求新资源被占用,请求被阻塞被阻塞的进程不释放自己所持有的资源不可剥夺条件 进程获得的资源在未完成使用前不能被剥夺(程序或操作系统均不可)获得的资源只能由进程自身释放环路等待条件 发生死锁时,必然存在进程-资源环形链 P为进程,R为资源 死锁的处理预防死锁的方法 前边提到了死锁的四个必要条件,只要破坏其中的一个或多个条件,就可以避免死锁的出现 破坏请求保持条件 系统规定进程运行之前,一次性申请所有需要的资源进程在运行期间不会提出资源请求,从而摒弃请求保持条件。也就不可能会因为在运行的时候请求资源而导致等待的情况破坏不可剥夺条件 当一个进程请求新的资源得不到满足时,必须释放占有的资源进程运行时占有的资源可以被释放,意味着可以被剥夺破坏环路等待条件 可用资源线性排序,申请必须按照需要递增申请线性申请不再形成环路,从而摒弃了环路等待条件 假设有A、B、C、D、E这五个资源,按照线性顺序将他们排起来,假设有一个进程需要A和D这两个资源的时候,它必须先申请A,才能申请D,这样就是线性申请 银行家算法银行家算法是一个可操作的著名的避免死锁的算法,以银行借贷系统分配策略为基础的算法 假设客户申请的贷款是有限的,每次申请需要声明最大资金量银行家在能满足贷款时,都应该给客户贷款客户在使用贷款后,能够及时归还贷款上边是银行家算法策略的一个基础,下边是具体过程: 这个算法要求有三个数据结构,分别是已分配资源表、所需资源表、可分配资源表 A、B、C、D为可申请的共享资源,P1、P2、P3、P4为需要申请资源的四个进程 已分配资源表 表中的数值表示的是每个进程它当前拥有的资源(如P1进程已分配了1个C资源和4个D资源) 所需资源表 表中的数值表示的是每个进程所需要各个资源的数量(如P1进程需要6个B资源、5个C资源和6个D资源) 可分配资源表 表中的数值表示的是系统里边还剩下的各种类型资源的数量 有了上边的几个数据结构的表格,就可以进行真实的演练了 (1)所需资源表减已分配资源表 这两个数据结构相减,得到还需分配资源表,然后将还需分配资源表和可分配资源表进行对比 我们会发现,可分配资源表,不满足进程P1的需求,因为P1进程需要6个B资源、4个C资源、2个D资源,而可用的A、B、C、D资源分别只有1、5、2、0个,因此不满足进程PA的需求。后边的P2、P3、P4使用同样的方法对比可发现,可分配资源表中的资源满足P2的需求,不满足P1、P3、P4的需求。因此,系统会把可分配的资源全部分发给P2,那么这个P2进程就可以继续的执行下去,等P2执行完之后,再归还所有的资源,归还之后,又可以将新的资源分配给别的进程。这个就是银行家算法。(P1、P2、P3、P4可以看做贷款的人,数字代表贷款的钱) 在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践

June 30, 2020 · 1 min · jiezi

计算机操作系统基础六作业管理之进程调度

引言本文为第六篇,作业管理之进程调度,本文主要介绍进程调度的概述和进程调度的算法 一、进程调度概述进程调度是指计算机通过决策决定哪个就绪进程可以获得CPU使用权。也就是说,进程调度指的是计算机选择哪一个进程可以使用CPU,前提是这个进程的状态为就绪状态 进程调度有两个步骤: 保留旧进程的运行信息,请出旧进程选择新进程,准备运行环境并分配CPU为了实现进程调度的这两个步骤,就需要了解三种重要的机制: 就绪队列的排队机制选择运行进程的委派机制新老进程的上下文切换机制就绪队列的排队机制(1)就绪队列的排队机制 就绪队列中摆放着所有的就绪状态的进程 就绪队列的排队机制就是为了提高进程调度的效率,事先将就绪进程按照一定的方式排成队列,以便调度程序可以最快找到就绪进程 (2)选择运行进程的委派机制 这个机制就要求可以从就绪队列中选出一个进程,然后让去CPU中进行执行。调度程序以一定的策略选择就绪进程,将CPU资源分配给它 (3)新老进程的上下文切换机制 如果要将新的进程调度到CPU中,就需要将老的进程的CPU环境备份出来,然后将新的进程的CPU环境切换进去。它保存当前进程的上下文信息,装入被委派执行进程的运行上下文 在CPU里面有一个高速缓存,这个机制就是首先将老进程的上下文备份到主存中,接着将新的进程的上下文放入到CPU中,准备环境,让新的进程可以运行起来,这个就是新老进程的上线文切换机制。这三个就是进程调度所需要的三个基本的机制 思考一个问题,如果进行调度的时候,老的进程还没有执行完,这个时候怎么办? 按照老的进程有没有执行完,将进程调度的方法分为两大类: 非抢占式的调度抢占式调度非抢占式的调度 CPU一旦分配给某个进程,就让该进程一直使用下去调度程序不以任何原因抢占正在被使用的CPU直到进程完成工作或因为IO阻塞才会让出CPU抢占式调度 允许调度程序以一定的策略暂停当前运行的进程保存好旧进程的上下文信息,分配CPU给新进程两种方式进行一个对比 进程调度的算法先来先服务调度算法短进程优先调度算法高优先权优先调度算法时间片轮转调度算法先来先服务调度算法在就绪队列中,按照先来先服务的原则,优先选择队列前面的进程进行调度 短进程优先调度算法调度程序优先选择就绪队列中估计运行时间最短的进程短进程优先调度算法不利于长作业进程的执行高优先权优先调度算法这个算法是以优先级为基础的 进程附带优先权,调度程序优先选择权重高的进程高优先权优先调度算法使得紧迫的任务可以优先处理前边文章中有说到,前台进程的优先级要高于后台进程的优先级,因为前台进程是与用户进行交互的,为了保证用户在使用系统的时候不会卡顿,因此前台进程权重就要高于后台进程 时间片轮转调度算法按先来先服务的原则排列就绪进程 每次从队列头部取出待执行进程,分配一个时间片执行(把这个时间片用完了,不管这个进程有没有执行完,都会将这个进程重新的插到队列的尾部。每个进程分配的时间片都是一样的)。是相对公平的调度算法,但不能保证及时响应用户 在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践 站在了巨人的肩膀上学习,向前辈致敬 参考:https://coding.imooc.com/clas...

June 29, 2020 · 1 min · jiezi

计算机操作系统基础五Linux的进程管理

引言本文为第五篇,Linux的进程管理,本文主要介绍Linux进程的相关概念、操作Linux进程的相关命令等。 一、Linux进程的相关概念1、进程的类型 (1)前台进程 前台进程就是具有终端,可以和用户进行交互的进程 下边写了一个死循环计算圆周率的程序 然后将程序跑起来,虽然程序没有输入任何东西,它却占了整个终端shell,此时输入任何命令都是没有用的,这个进程就是一个前台进程 现在改一下刚才的代码,让它不断的打印hello world 此时运行代码,它会死循环的输出hello world,这个就是一个有输出的前台进程,这个有输出的前台进程输出的内容占满了整个终端shell,即使输入任何的命令都是不管用的,因为这个前台进程占用了终端shell (2)后台进程 与前台进程相对,没有占用终端的就是后台进程后台进程基本上不和用户进行交互,优先级比前台进程低(因为前台进程要与用户进行交互,因此必须在响应速度或者在别的地方要跟得上,使得与用户交互时更加顺畅)后台进程我们一般是使用&符号结束,这样就可以启动一个后台进程举例: 现在将前边的代码改一下,让它每5秒输出一个hello world,然后以后台进程的方式让它跑起来 此时可以看见,我们以后台进程的方式将它跑起来的时候,它会输出一个进程ID,而且,这个后台进程是不占用shell的,虽然它的内容会打印到终端上,但是我们还是可以正常的使用命令的,同时,我们如果使用Ctrl+C,也是不会将这个后台进程停止的。 (3)守护进程 守护进程(daemon)是特殊的后台进程很多守护进程在系统引导的时候启动,一直运行,直到系统关闭Linux有很多典型的守护进程比如crond,这个就是Linux中定时任务守护进程、httpd是Linux中http服务的守护进程、sshd是平时我们使用ssh登录时候的守护进程、mysqld是数据库的守护进程(进程名字以d结尾的一般都是守护进程) 2、进程的标记 (1)进程ID 进程的ID是进程的唯一标记,每个进程拥有不同的ID进程ID表现为一个非负的整数,最大值由操作系统限定我们使用top命令就可以查看Linux中的所有进程,最左侧的PID列就是进程的ID 操作系统提供了fork()函数来创建进程,所以就可能出现下边这种情况 上边就是进程的层级关系,这中层级关系称之为父子进程关系。进程A通过fork函数创建了进程B,因此进程A是进程B的父进程。进程的父子关系,可以通过pstree命令查看 介绍几个特殊的进程 ID为0的进程为idle进程,是系统创建的第一个进程 ID为1的进程为init进程,是0号进程的子进程,负责完成系统的初始化(init进程是所有用户进程的祖先进程) (2)进程的状态标记 在Linux中,可以使用man ps命令来了解各种进程状态的标记,这里只挑几个比较重要的进行介绍 现在将刚才上边写的死循环计算圆周率的代码以后台进程的方式跑起来,并且将一个死循sleep的代码也以后台进程的方式跑起来,然后看一下这两个进程的状态标记 此时两个进程分别处于运行状态和睡眠状态 二、操作Linux进程的相关命令 ps命令(主要是用来查看进程) top命令(主要是查看Linux进程的使用内存或者是一些别的状态) kill命令(主要是用来给进程发送信号的) 1、ps命令 (1)列出当前进程:ps (2)查看进程详细信息:ps -aux (3)查看指定用户进程:ps -u username查看所有root用户的进程:ps -u root (4)查看指定进程:ps -aux|grep 指定进程信息 (5)查看进程树(查看进程的父子关系):ps -ef --forest (6)将进程按使用cpu的频率来进行排序:ps -aux --sort=pcpu ...

June 28, 2020 · 1 min · jiezi

计算机操作系统基础四进程管理之进程同步

引言本文为第四篇,进程管理之进程同步,本文主要介绍为什么需要进程间同步以及进程间同步的原则和线程同步 一、为什么需要进程间同步通过两个例子了解一下什么是进程同步以及为什么需要进程同步 (1)生产者-消费者问题 问题描述:有一群生产者进程在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程需要将所生产的产品放到一个缓冲区中,消费者进程可以从缓冲区中取走产品消费 生产和消费的过程 当生产者生产了一个产品之后,缓冲区里的产品就会+1,同样,如果消费者从缓冲区里边消费一个产品,缓冲区里的产品就会-1,在生活中这种模型是没有问题的(比如生产手机的工厂,流水线上生产完一个手机,就会放在仓库里边,消费者从仓库中取出手机消费,这个生产者-消费者模型从宏观的角度上看没有问题) 上边的模型在宏观的角度上看没有问题,但是在计算机微观的角度去看就会有问题。在计算机中,这个缓冲区是位于高速缓存或主存上边的,如果说生产者或消费者要操作里边的数据时,就分为三个步骤: a、取出数据放到寄存器中 register=count b、在CPU的寄存器中将register+1、register=register+1 表示说生产者完成了一个产品 c、将register放回缓冲区 count=register 这三步就是就是我们操作缓冲区必须的三个步骤。我们就可以将缓冲区看作是仓库,将register寄存器看作是生产者的地方或者消费者的地方,这个模型我们乍一看,好像也没什么问题 单从生产者程序或者消费者程序去看是没问题的,但是如果两者并发的去执行的时候就有可能出现差错 下边红色部分为生产者生产的过程,蓝色的为消费者消费的过程 将register和count看作是两个部分的值(假设为10), 假设此时执行生产者的第一步,也就是register=count,此时两者均为10,接着执行生产者的第二步,register=register+1,此时寄存器中的值+1了,那么此时register=11,count=10,假设生产者程序和消费者程序是并发的执行的,那么第三步就有可能轮到消费者去执行了,那么假设此时到了消费者的第一步register=count,那么这个时候消费者的进程里边的寄存器的值就是10,接着执行第四步,假设第四步执行到消费者的第二步,也就是register=register-1,此时消费者的进程的寄存器的值就变成9了,而缓存里边的值还是10,接着执行第五步,第五步假设执行到消费者的第三个步骤count=register,也就是把寄存器里边的值写回到缓冲区里边,此时缓冲区和消费者的寄存器的值都是9了,这里就完成了消费者的操作,接下来还有一个生产者的操作,将生产者的register写回到缓冲区里边,那么在刚才,生产者的register是等于11,那么执行完这一步,它会将register重新的写回到缓冲区中,那么缓冲区中得值就变成了11,count=register。那这个样子其实就有问题了,刚开始缓冲区的值是10,而在执行的过程中进行了+1和-1的操作,那么它的值应该还是10才对,但是租后却变成了11,说明这个数据是错误的,错误的原因就在于这两个进程在并发的执行了,他们轮流的在操作缓冲区,导致缓冲区中的数据不一致,这个就是生产者-消费者的问题 下边看一个实际执行的例子,下边是一个简单的程序,使用了两个线程模拟生产者和消费者的过程: #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <vector>pthread_ mutex t mutex = PTHREAD MUTEX INITIALIZER;int num = 0;//全局变量,初始值为0void *producer(void*){//生产者 int times = 10000000 ; while(times -- ){//生产者将num循环+1很多次,表示生产过程,消费者是循环-1 //pthread mutex_ lock (&mutex) ; num+=1; //pthread mutex unlock (&mutex) ; }}void *comsumer (void* ){//消费者 int times = 10000000 ;while(times -- ){ //pthread mutex lock (&mutex) ; num -= 1; //pthread mutex unlock (&mutex) ; }}//在main函数中创建了两个线程来模拟两个进程,一个线程执行producer的逻辑,一个线程执行comsumer的逻辑int main(){ printf("Start a main function."); pthread_t thread1,thread1; pthread_create(&thread1, NULL, &producer, NULL); pthread_create(&thread1, NULL, &comsumer, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("Print in main function: num = %d\n", num); retuen 0}因为生产者和消费者循环的次数都是一样的,那么执行的结果应该是0才对,那实际的执行结果是不是呢?我们会发现不是,那么这个就是生产者和消费者的问题。上边例子中的缓冲区和num就是临界资源 ...

June 27, 2020 · 1 min · jiezi

计算机操作系统基础三进程管理之五状态模型

引言本文为第三篇,进程管理之五状态模型,进程在操作系统里边是有多个状态的,本文就是了解进程在操作系统中的多个状态 1、进程的五个状态创建状态就绪状态阻塞状态执行状态终止状态2、进程处于这五种状态时在做什么(1)就绪状态 当进程被分配到除CPU以外的所有必要资源后,就处于就绪状态只要再获得CPU的使用权,就可以里立即运行其它资源都准备好,只差CPU资源的状态,就是就绪状态其它资源包括进程控制块(PCB)、内存、栈空间、堆空间等 在操作系统里边,我们知道,多个程序可以并发的运行,这个时候就可能存在多个就绪状态的进程,这些进程通常会排成一个队列,这个队列就称为就绪队列,在就绪队列里边有多个就绪的进程 (2)执行状态 进程获得CPU使用权,其程序正在执行,称为执行状态在单处理机(一个CPU只有一个核的情况),在某个时刻只能有一个进程是处于执行状态(3)阻塞状态 进程由于某种原因,如:其它设备未就绪而无法继续执行,从而放弃CPU的状态,就称为阻塞状态 比如说有个进程要请求打印机,但是由于打印机正处于被占用的情况,进程收不到回应,那么就会处于阻塞状态。当多个进程同时请求打印机时,也会处于阻塞状态,此时也有阻塞队列的概念 (4)创建状态 创建状态分为两步: a、分配PCB b、插入就绪队列 创建进程时,拥有PCB,但其它资源尚未就绪的状态称为创建状态 (5)终止状态 终止状态也分为两步: a、系统清理 b、归还PCB 进程结束由系统清理或者归还PCB的状态称为终止状态 3、就绪、阻塞、执行三种状态之间的切换当进程发生进程调度的时候,就会由就绪状态变为执行状态,当某一个进程发生进程调度的时候就会获取到CPU的资源,当执行状态的进程的CPU资源用完了,它就会切换回就绪的状态,插入到就绪队列中,这里的CPU资源用完指的是,分配给某一个进程执行CPU的时间用完了 当执行状态的进程发生IO请求的时候就有可能变成阻塞状态(前边有说到请求打印机的例子)。当发生IO完成的时候,就会由阻塞状态切换到就绪状态 在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践

June 26, 2020 · 1 min · jiezi

一周信创舆情观察615621

一、一周舆情要点 进入6月,多地信创项目开始大面积铺开。本周,江苏、云南、湖南、厦门等省市相继在信创领域放出大招。预计未来一段时间,各地将进入信创政策落实期,地方招商引资有望提速。 Matlab禁运事件将给国产工业软件带来发展机遇。平安证券认为,继Matlab之后,AutoCAD、EDA、CAE等核心工业软件未来存在管控风险。长期来看,国家需要加大对工业软件的扶持力度。 科技巨头加码新基建,多方入局电力市场。本周,百度发布两个500万计划,宣布未来十年将继续加大在人工智能、芯片、云计算、数据中心等新基建领域的投入,到2030年百度智能云服务器数量超500万台。15日,国家电网发布“数字新基建”十大重点建设任务,与华为、阿里、腾讯、百度等41家合作伙伴签署战略合作协议,有分析人士认为,互联网巨头主要作为技术提供商加入。 二、舆情传播分析 6月15日0时~6月21日23时,全网关于“信创”的舆情总量共5441条,环比下降13.3%。从传播趋势看,工作日期间舆情走势相对平稳,周末声量出现明显下降。 媒体类型方面,6月15日~21日,“信创”相关舆情主要集中在新闻APP平台,占比达40.93%;其次是新闻网站,占26.85%;微信、微博平台分别占21.63%和5.35%;论坛平台占4.36%;数字报、博客、问答等平台相关舆情较少,累计占比不足1%。 话题方面,本周舆论聚焦的信创热点主要包括“上证综指修改编制方式”、“杜家豪主持召开信息化创新工程联席会议”、“机构信创观点”、“国家存储器基地项目二期开工”和“世界智能大会”。 文章层面,6月18日,今晚报发布的文章《大数据云计算、信息安全、工业机器人……天津智能科技产业形成九大优势领域》热度最高,全网累计传播了112次。文章指出,目前,天津市已形成大数据云计算、信息安全、工业机器人、智能安防、智能医疗、智能软件、智能网联汽车、先进通信、智能终端九大特色优势领域,产业集聚度不断提升。 “网信河东”6月16日发布的《世界智能大会在津开花结果》一文排在热度榜第二名。文章提到,世界智能大会为天津市带来丰硕战略合作成果。目前,天津市已与工信部、科技部、中国工程院、中国科协等单位签署“部市”“院市”战略合作协议5个;与华为、百度、腾讯等行业领军企业、单位签约200项。 环球网6月16日发布的《江苏省信创产业生态基地揭牌 360成首批入驻企业》排在热度榜第三名,累计在20个网站传播55次。文章称,6月15日,“江苏省信息技术应用创新大会”在无锡市召开。本次大会上,江苏省信息技术应用创新产业生态基地正式揭牌,360等25家企业首批入驻。 北京新基建方案相关解读文章排在热度榜第四名,本周累计在5个网站传播了54次,其中大多分布在微信平台。 湖南日报18日发布的《杜家毫主持召开信息化创新工程联席会议》排在热度榜第五名。文章指出,要进一步增强紧迫感和自觉性,立足湖南产业基础和优势,抢抓中央实施扩大内需、新增地方政府债券等重大机遇,把推进信创产业发展作为保产业链供应链稳定安全的重要内容。 三、政策动态 1、六部门联合印发《国家电子政务标准体系建设指南》 近日,市场监管总局办公厅、中共中央办公厅机要局、国务院办公厅电子政务办公室、中央网信办秘书局、国家发展改革委办公厅和工业和信息化部办公厅六部门联合印发了《国家电子政务标准体系建设指南》(以下简称《指南》)。《指南》提出,到2022年,全面覆盖电子政务基础共性标准、关键应用标准、安全保障标准,建立较为先进的国家电子政务标准体系,有效指导电子政务建设,建设电子政务标准应用服务平台,提升标准服务能力,提高标准应用水平。 其中,基础设施标准包括政务硬件设施标准、政务软件设施标准和政务网络标准。政务硬件设施标准与政务软件设施标准聚焦于电子政务公共基础设施的集约化,对政务信息系统的基本要求、功能要求等基础性要求进行规范,大力推广政务云平台,推动计算资源、存储资源、服务支撑、安全保障等共性基础资源的集约共享;政务网络标准围绕电子政务网络建设中的技术、管理提出要求,指导电子政务网络、业务专网建设与运行。(市场监管总局网站) 四、重点舆情摘要 1、地方信创大面积铺开 招商引资提速 6月15日,江苏省信息技术应用创新产业生态基地揭牌,25家企业现场签约;16日,云南云岭信创伙伴计划发布会召开,50余家集成商和厂家被授予“云岭信创伙伴纪念牌”;18日,湖南省委书记杜家豪主持召开信息化创新工程联席会议,强调加大信创产品应用场景开放和推广力度;19日,厦门市信息技术应用创新工作委员会成立,103家信创企业加入。 【划重点】 进入6月,多地信创项目开始大面积铺开,信创企业集中签约、信创产业联盟相继成立。预计未来一段时间,各地将进入信创政策落实期,地方招商引资有望提速。地方政府作为信创需求方之一,对打造信创产业链有着较高的积极性。一方面,推进信创产业建设是落实国家战略的重要行动,另一方面,信创产业引入也是推动当地经济发展的重要抓手。从目前各地推进情况看,除了鼓励信创企业落户、联合本地企业投资等,更多的是选择打造信创生态体系达成战略协议。 2、Matlab禁运 国产工业软件迎发展机遇 上周网络热议的Matlab禁令事件有了新解释:一、凡在美国商务部列出“实体清单”内的院校、机构及公司,使用 MATLAB均会受到一定影响;二、禁令不影响已购买版本的使用,但将限制未来新版本的采购及配套服务。(安信证券) 【划重点】 中美科技战持续激化,平安证券认为,美国对国内大学的制裁或只是个开始,未来相关研究工具,尤其是类似Matlab、AutoCAD、EDA、CAE等核心工业软件可能受到更严格的限制。此次制裁短期内对我国理工类研发工作影响较大,研究人员需要加快寻找替代品;长期来看,国家需要加大对工业软件的扶持力度,引导科研院所、高校和科技企业积极投身工业软件研发。 安信证券认为,软件相比芯片更容易解决“卡脖子”的问题。一方面在生产流程上,软件相较芯片产业较长的产业链,上游受限制风险极小;在交付方式上,芯片存在运输限制风险,而软件产品可直接通过互联网分发。 五、地方动态 1、湖南省委书记杜家豪主持召开信息化创新工程联席会议 6月18日,湖南省委书记杜家豪主持召开信息化创新工程联席会议。杜家豪强调,要牢牢抓住应用这个核心,着力加大信创产品应用场景开放和推广力度,加强技术研发、保障和应用场景攻关,强化湖南省相关优势产品的需求牵引。同时,要强化标准建设,推动更多优势企业和产品嵌入信创产业链;要加大信创人才引进和培养力度,着力打造特色产业园。(湖南省人民政府网站) 2、江苏省信息技术应用创新产业生态基地揭牌 6月15日,江苏省信息技术应用创新大会在无锡召开。会议期间,由省工信厅和无锡市联合共建的江苏省信息技术应用创新产业生态基地以“一基地、四中心”的创新模式正式揭牌。据了解,生态基地由省信息技术应用创新攻关基地、省信息技术应用创新测试中心、省信息技术应用创新培训中心、省信息技术应用创新联盟展示中心和省密码技术应用创新促进中心组成,江苏省信创攻关基地首批共建企业25家在现场正式签约。(新华网) 3、云南云岭信创伙伴计划发布会召开 将组建产业联盟助推信创产业发展 6月16日,云岭信创伙伴计划发布会在昆明市云投集团召开,来自全国IT行业50余家企业参加。会议指出,新一轮科技革命与产业变革给“数字云南”建设指出了新方向、提出了新要求。下一步,云南将着力打造信创基础设施平台,加快产业体系构建,建设面向南亚东南亚数字枢纽,发挥资金、资源、项目优势,携手云岭信创伙伴打造信创生态圈,推动信创产业做大做强。大会发布共同倡议,点亮云岭信创伙伴计划,向50余家集成商和厂家授予“云岭信创伙伴纪念牌”。(云南网) 4、厦门市信息技术应用创新工作委员会成立 6月19日,厦门市信息技术应用创新工作委员会(以下简称“信创工委会”)正式成立。信创工委会是由从事软硬件关键技术研究、应用和服务的单位发起建立的非营利性社会组织,是厦门市信息协会的分支机构,受厦门市信息协会管理。信创工作委员会作为厦门市信创供需双方的服务窗口,将在产业交流、人才培训、投融资、产品适配、场景应用等方面营造良好的信创产业生态环境,带动全产业链协同发展,努力为党政机关和信创企业提供全面全方位服务。目前,已有浪潮、统信、麒麟、奇安信等来自全国各地103家信创企业加入。(厦门市信息协会官网) 5、重庆计划到2022年累计投入3983亿元布局“新基建” 6月19日,重庆市政府网公开《重庆市新型基础设施重大项目建设行动方案(2020—2022年)》(以下简称《方案》)。《方案》提出,到2022年,重庆将总投资3983亿元,滚动实施和储备375个新基建重大项目。具体来看,这批重大项目包含了信息基础设施、融合基础设施、创新基础设施等3个方面,将突出新型网络、智能计算、信息安全、转型促进、融合应用、基础科研、产业创新等7大板块。目前,在建项目152个,总投资2101亿元,主要任务是提速建设,对冲疫情影响、稳定经济增长;新开工项目102个,总投资831亿元,主要任务是加快启动,进一步扩大有效投资、培育新增长点;储备项目121个,总投资1051亿元,主要任务是聚焦引领实体经济转型升级、激活发展新动能,为“十四五”及中长期发展提供坚实支撑。(重庆市政府网站) 6、湖北出台新基建三年行动方案 6月15日,湖北省印发《湖北省新型基础设施建设三年行动方案》。未来三年,湖北将围绕信息基础设施、融合基础设施、创新基础设施三个方面展开建设。到2022年底,全省建成6万个以上5G宏基站,武汉市和省内其他市州主城区5G网络覆盖率达到100%;同时,全省5G网络覆盖率和建设水平领先中部,新型基础设施规模进入全国第一方阵。(湖北日报) 7、中国电子与山东签署战略合作协议 6月15日,中国电子与山东省人民政府签订战略合作框架协议,双方将围绕新一代信息技术产业高质量发展,开展全方位、多层次的交流合作,聚焦网络安全、现代数字城市、工业互联网、区块链、健康医疗大数据等领域,加速双方资源有效对接,优化山东省信息技术产业生态,助力建设新时代现代化强省,实现中国电子与山东省共赢发展。(证券时报) 8、安徽省人民政府与阿里巴巴集团、蚂蚁集团签署战略合作协议 6月15日,安徽省人民政府与阿里巴巴集团、蚂蚁集团签署战略合作协议。根据战略合作协议,安徽省人民政府、阿里巴巴集团、蚂蚁集团三方将深化合作,带动物联网、大数据、人工智能、区块链等高技术产业在安徽集聚发展,共同打造长三角地区政府与企业合作新典范。仪式上,合肥、蚌埠、滁州、芜湖、黄山、宿州等市与阿里巴巴集团、蚂蚁集团分别签署了合作协议。(安徽日报) 9、郑州与阿里巴巴深化战略合作 6月16日,郑州市与阿里巴巴集团签署深化战略合作协议,合力推动数字化,宣布联手打造“中部数字经济第一城”。双方当天签署了一系列具体项目协议,包括郑州“城市大脑”二期项目、2020年数字郑州生态联盟、数字郑州人才战略合作等。阿里巴巴集团董事局主席张勇表示,阿里巴巴将在三个重要方向助力郑州的数字化发展——“共建平台,共创生态,共育人才”。(河南省政府网站) 六、行业动态 1、西湖论剑·网络安全线上峰会首次聚焦信息技术应用创新 6月16日,2020西湖论剑·网络安全线上峰会首次开设“信息技术应用创新网络安全”分论坛。来自国内芯片、安全、应用等厂商的多位专家齐聚于此,共同围绕信息技术应用创新网络安全新生态、新创新的话题展开讨论。浙江省经济和信息化厅副厅长吴君青在致辞中表示,下一步,浙江将推进信息技术自主创新产业基地建设,实施一批试点工程。(中国日报) 2、腾讯安全推出新一代云防火墙 6月16日,腾讯安全举办线上新品发布会,宣布推出战略级新品——新一代SaaS化云防火墙。相比云平台自带的免费安全组,腾讯安全云防火墙能为上云企业提供更精细的访问控制和安全服务,包括基于SaaS的云上资产自动识别与一键开关、集成IPS入侵防御系统拦截网络攻击、威胁情报与智能分析加持、安全日志审计以及多VPC场景管理等多元化功能。(经济日报) 3、中国移动自研物联网操作系统OneOS正式商用 6月17日,中国移动在网络云平台正式召开“创新2020,云上科技周”。中移物联网有限公司总经理乔辉在会上正式发布了中国移动物联网操作系统OneOS。OneOS是中国移动从2018年投入研发的一款面向物联网领域推出的轻量级实时操作系统,具有可裁剪、跨平台、低能耗、高安全等特点。中国移动OneOS支持跨芯片平台,提供互联互通组件、端云融合组件与安全性设计架构。中国移动表示,OneOS未来将被运用到智能穿戴、智能门锁、智慧充电、环境监测等智慧系统。(IT之家) 4、微软收购行业数据模型供应商ADRM,以创建智能数据库 6月19日消息,微软收购了ADRM软件,把ADRM的数据模型与Azure存储和计算相结合,以创建智能数据库,将来自多个行业的信息汇集在一起。ADRM是一家提供大规模的行业特定数据模型的公司,其数据模型覆盖了通信、金融服务和医疗保健等多个行业。消息称,该交易的财务条款尚未披露。(DoNews) 5、SAS与微软就云服务达成合作以推进数据分析和人工智能 SAS(赛仕软件)和微软于17日宣布双方就技术范围和市场战略方面达成合作,以扩展双方业务,从数字转型计划中释放关键价值。作为合作的一部分,微软会成为SAS云服务的首选云平台提供商,SAS的分析产品和行业解决方案随后也会被转移至Azure平台,这些内容都将为微软在医疗保健、金融服务和许多其他行业的客户带来附加价值。(新浪财经) ...

June 24, 2020 · 1 min · jiezi

一周信创舆情观察615621

一、一周舆情要点 进入6月,多地信创项目开始大面积铺开。本周,江苏、云南、湖南、厦门等省市相继在信创领域放出大招。预计未来一段时间,各地将进入信创政策落实期,地方招商引资有望提速。 Matlab禁运事件将给国产工业软件带来发展机遇。平安证券认为,继Matlab之后,AutoCAD、EDA、CAE等核心工业软件未来存在管控风险。长期来看,国家需要加大对工业软件的扶持力度。 科技巨头加码新基建,多方入局电力市场。本周,百度发布两个500万计划,宣布未来十年将继续加大在人工智能、芯片、云计算、数据中心等新基建领域的投入,到2030年百度智能云服务器数量超500万台。15日,国家电网发布“数字新基建”十大重点建设任务,与华为、阿里、腾讯、百度等41家合作伙伴签署战略合作协议,有分析人士认为,互联网巨头主要作为技术提供商加入。 二、舆情传播分析 6月15日0时~6月21日23时,全网关于“信创”的舆情总量共5441条,环比下降13.3%。从传播趋势看,工作日期间舆情走势相对平稳,周末声量出现明显下降。 媒体类型方面,6月15日~21日,“信创”相关舆情主要集中在新闻APP平台,占比达40.93%;其次是新闻网站,占26.85%;微信、微博平台分别占21.63%和5.35%;论坛平台占4.36%;数字报、博客、问答等平台相关舆情较少,累计占比不足1%。 话题方面,本周舆论聚焦的信创热点主要包括“上证综指修改编制方式”、“杜家豪主持召开信息化创新工程联席会议”、“机构信创观点”、“国家存储器基地项目二期开工”和“世界智能大会”。 文章层面,6月18日,今晚报发布的文章《大数据云计算、信息安全、工业机器人……天津智能科技产业形成九大优势领域》热度最高,全网累计传播了112次。文章指出,目前,天津市已形成大数据云计算、信息安全、工业机器人、智能安防、智能医疗、智能软件、智能网联汽车、先进通信、智能终端九大特色优势领域,产业集聚度不断提升。 “网信河东”6月16日发布的《世界智能大会在津开花结果》一文排在热度榜第二名。文章提到,世界智能大会为天津市带来丰硕战略合作成果。目前,天津市已与工信部、科技部、中国工程院、中国科协等单位签署“部市”“院市”战略合作协议5个;与华为、百度、腾讯等行业领军企业、单位签约200项。 环球网6月16日发布的《江苏省信创产业生态基地揭牌 360成首批入驻企业》排在热度榜第三名,累计在20个网站传播55次。文章称,6月15日,“江苏省信息技术应用创新大会”在无锡市召开。本次大会上,江苏省信息技术应用创新产业生态基地正式揭牌,360等25家企业首批入驻。 北京新基建方案相关解读文章排在热度榜第四名,本周累计在5个网站传播了54次,其中大多分布在微信平台。 湖南日报18日发布的《杜家毫主持召开信息化创新工程联席会议》排在热度榜第五名。文章指出,要进一步增强紧迫感和自觉性,立足湖南产业基础和优势,抢抓中央实施扩大内需、新增地方政府债券等重大机遇,把推进信创产业发展作为保产业链供应链稳定安全的重要内容。 三、政策动态 1、六部门联合印发《国家电子政务标准体系建设指南》 近日,市场监管总局办公厅、中共中央办公厅机要局、国务院办公厅电子政务办公室、中央网信办秘书局、国家发展改革委办公厅和工业和信息化部办公厅六部门联合印发了《国家电子政务标准体系建设指南》(以下简称《指南》)。《指南》提出,到2022年,全面覆盖电子政务基础共性标准、关键应用标准、安全保障标准,建立较为先进的国家电子政务标准体系,有效指导电子政务建设,建设电子政务标准应用服务平台,提升标准服务能力,提高标准应用水平。 其中,基础设施标准包括政务硬件设施标准、政务软件设施标准和政务网络标准。政务硬件设施标准与政务软件设施标准聚焦于电子政务公共基础设施的集约化,对政务信息系统的基本要求、功能要求等基础性要求进行规范,大力推广政务云平台,推动计算资源、存储资源、服务支撑、安全保障等共性基础资源的集约共享;政务网络标准围绕电子政务网络建设中的技术、管理提出要求,指导电子政务网络、业务专网建设与运行。(市场监管总局网站) 四、重点舆情摘要 1、地方信创大面积铺开 招商引资提速 6月15日,江苏省信息技术应用创新产业生态基地揭牌,25家企业现场签约;16日,云南云岭信创伙伴计划发布会召开,50余家集成商和厂家被授予“云岭信创伙伴纪念牌”;18日,湖南省委书记杜家豪主持召开信息化创新工程联席会议,强调加大信创产品应用场景开放和推广力度;19日,厦门市信息技术应用创新工作委员会成立,103家信创企业加入。 【划重点】 进入6月,多地信创项目开始大面积铺开,信创企业集中签约、信创产业联盟相继成立。预计未来一段时间,各地将进入信创政策落实期,地方招商引资有望提速。地方政府作为信创需求方之一,对打造信创产业链有着较高的积极性。一方面,推进信创产业建设是落实国家战略的重要行动,另一方面,信创产业引入也是推动当地经济发展的重要抓手。从目前各地推进情况看,除了鼓励信创企业落户、联合本地企业投资等,更多的是选择打造信创生态体系达成战略协议。 2、Matlab禁运 国产工业软件迎发展机遇 上周网络热议的Matlab禁令事件有了新解释:一、凡在美国商务部列出“实体清单”内的院校、机构及公司,使用 MATLAB均会受到一定影响;二、禁令不影响已购买版本的使用,但将限制未来新版本的采购及配套服务。(安信证券) 【划重点】 中美科技战持续激化,平安证券认为,美国对国内大学的制裁或只是个开始,未来相关研究工具,尤其是类似Matlab、AutoCAD、EDA、CAE等核心工业软件可能受到更严格的限制。此次制裁短期内对我国理工类研发工作影响较大,研究人员需要加快寻找替代品;长期来看,国家需要加大对工业软件的扶持力度,引导科研院所、高校和科技企业积极投身工业软件研发。 安信证券认为,软件相比芯片更容易解决“卡脖子”的问题。一方面在生产流程上,软件相较芯片产业较长的产业链,上游受限制风险极小;在交付方式上,芯片存在运输限制风险,而软件产品可直接通过互联网分发。 五、地方动态 1、湖南省委书记杜家豪主持召开信息化创新工程联席会议 6月18日,湖南省委书记杜家豪主持召开信息化创新工程联席会议。杜家豪强调,要牢牢抓住应用这个核心,着力加大信创产品应用场景开放和推广力度,加强技术研发、保障和应用场景攻关,强化湖南省相关优势产品的需求牵引。同时,要强化标准建设,推动更多优势企业和产品嵌入信创产业链;要加大信创人才引进和培养力度,着力打造特色产业园。(湖南省人民政府网站) 2、江苏省信息技术应用创新产业生态基地揭牌 6月15日,江苏省信息技术应用创新大会在无锡召开。会议期间,由省工信厅和无锡市联合共建的江苏省信息技术应用创新产业生态基地以“一基地、四中心”的创新模式正式揭牌。据了解,生态基地由省信息技术应用创新攻关基地、省信息技术应用创新测试中心、省信息技术应用创新培训中心、省信息技术应用创新联盟展示中心和省密码技术应用创新促进中心组成,江苏省信创攻关基地首批共建企业25家在现场正式签约。(新华网) 3、云南云岭信创伙伴计划发布会召开 将组建产业联盟助推信创产业发展 6月16日,云岭信创伙伴计划发布会在昆明市云投集团召开,来自全国IT行业50余家企业参加。会议指出,新一轮科技革命与产业变革给“数字云南”建设指出了新方向、提出了新要求。下一步,云南将着力打造信创基础设施平台,加快产业体系构建,建设面向南亚东南亚数字枢纽,发挥资金、资源、项目优势,携手云岭信创伙伴打造信创生态圈,推动信创产业做大做强。大会发布共同倡议,点亮云岭信创伙伴计划,向50余家集成商和厂家授予“云岭信创伙伴纪念牌”。(云南网) 4、厦门市信息技术应用创新工作委员会成立 6月19日,厦门市信息技术应用创新工作委员会(以下简称“信创工委会”)正式成立。信创工委会是由从事软硬件关键技术研究、应用和服务的单位发起建立的非营利性社会组织,是厦门市信息协会的分支机构,受厦门市信息协会管理。信创工作委员会作为厦门市信创供需双方的服务窗口,将在产业交流、人才培训、投融资、产品适配、场景应用等方面营造良好的信创产业生态环境,带动全产业链协同发展,努力为党政机关和信创企业提供全面全方位服务。目前,已有浪潮、统信、麒麟、奇安信等来自全国各地103家信创企业加入。(厦门市信息协会官网) 5、重庆计划到2022年累计投入3983亿元布局“新基建” 6月19日,重庆市政府网公开《重庆市新型基础设施重大项目建设行动方案(2020—2022年)》(以下简称《方案》)。《方案》提出,到2022年,重庆将总投资3983亿元,滚动实施和储备375个新基建重大项目。具体来看,这批重大项目包含了信息基础设施、融合基础设施、创新基础设施等3个方面,将突出新型网络、智能计算、信息安全、转型促进、融合应用、基础科研、产业创新等7大板块。目前,在建项目152个,总投资2101亿元,主要任务是提速建设,对冲疫情影响、稳定经济增长;新开工项目102个,总投资831亿元,主要任务是加快启动,进一步扩大有效投资、培育新增长点;储备项目121个,总投资1051亿元,主要任务是聚焦引领实体经济转型升级、激活发展新动能,为“十四五”及中长期发展提供坚实支撑。(重庆市政府网站) 6、湖北出台新基建三年行动方案 6月15日,湖北省印发《湖北省新型基础设施建设三年行动方案》。未来三年,湖北将围绕信息基础设施、融合基础设施、创新基础设施三个方面展开建设。到2022年底,全省建成6万个以上5G宏基站,武汉市和省内其他市州主城区5G网络覆盖率达到100%;同时,全省5G网络覆盖率和建设水平领先中部,新型基础设施规模进入全国第一方阵。(湖北日报) 7、中国电子与山东签署战略合作协议 6月15日,中国电子与山东省人民政府签订战略合作框架协议,双方将围绕新一代信息技术产业高质量发展,开展全方位、多层次的交流合作,聚焦网络安全、现代数字城市、工业互联网、区块链、健康医疗大数据等领域,加速双方资源有效对接,优化山东省信息技术产业生态,助力建设新时代现代化强省,实现中国电子与山东省共赢发展。(证券时报) 8、安徽省人民政府与阿里巴巴集团、蚂蚁集团签署战略合作协议 6月15日,安徽省人民政府与阿里巴巴集团、蚂蚁集团签署战略合作协议。根据战略合作协议,安徽省人民政府、阿里巴巴集团、蚂蚁集团三方将深化合作,带动物联网、大数据、人工智能、区块链等高技术产业在安徽集聚发展,共同打造长三角地区政府与企业合作新典范。仪式上,合肥、蚌埠、滁州、芜湖、黄山、宿州等市与阿里巴巴集团、蚂蚁集团分别签署了合作协议。(安徽日报) 9、郑州与阿里巴巴深化战略合作 6月16日,郑州市与阿里巴巴集团签署深化战略合作协议,合力推动数字化,宣布联手打造“中部数字经济第一城”。双方当天签署了一系列具体项目协议,包括郑州“城市大脑”二期项目、2020年数字郑州生态联盟、数字郑州人才战略合作等。阿里巴巴集团董事局主席张勇表示,阿里巴巴将在三个重要方向助力郑州的数字化发展——“共建平台,共创生态,共育人才”。(河南省政府网站) 六、行业动态 1、西湖论剑·网络安全线上峰会首次聚焦信息技术应用创新 6月16日,2020西湖论剑·网络安全线上峰会首次开设“信息技术应用创新网络安全”分论坛。来自国内芯片、安全、应用等厂商的多位专家齐聚于此,共同围绕信息技术应用创新网络安全新生态、新创新的话题展开讨论。浙江省经济和信息化厅副厅长吴君青在致辞中表示,下一步,浙江将推进信息技术自主创新产业基地建设,实施一批试点工程。(中国日报) 2、腾讯安全推出新一代云防火墙 6月16日,腾讯安全举办线上新品发布会,宣布推出战略级新品——新一代SaaS化云防火墙。相比云平台自带的免费安全组,腾讯安全云防火墙能为上云企业提供更精细的访问控制和安全服务,包括基于SaaS的云上资产自动识别与一键开关、集成IPS入侵防御系统拦截网络攻击、威胁情报与智能分析加持、安全日志审计以及多VPC场景管理等多元化功能。(经济日报) 3、中国移动自研物联网操作系统OneOS正式商用 6月17日,中国移动在网络云平台正式召开“创新2020,云上科技周”。中移物联网有限公司总经理乔辉在会上正式发布了中国移动物联网操作系统OneOS。OneOS是中国移动从2018年投入研发的一款面向物联网领域推出的轻量级实时操作系统,具有可裁剪、跨平台、低能耗、高安全等特点。中国移动OneOS支持跨芯片平台,提供互联互通组件、端云融合组件与安全性设计架构。中国移动表示,OneOS未来将被运用到智能穿戴、智能门锁、智慧充电、环境监测等智慧系统。(IT之家) 4、微软收购行业数据模型供应商ADRM,以创建智能数据库 6月19日消息,微软收购了ADRM软件,把ADRM的数据模型与Azure存储和计算相结合,以创建智能数据库,将来自多个行业的信息汇集在一起。ADRM是一家提供大规模的行业特定数据模型的公司,其数据模型覆盖了通信、金融服务和医疗保健等多个行业。消息称,该交易的财务条款尚未披露。(DoNews) 5、SAS与微软就云服务达成合作以推进数据分析和人工智能 SAS(赛仕软件)和微软于17日宣布双方就技术范围和市场战略方面达成合作,以扩展双方业务,从数字转型计划中释放关键价值。作为合作的一部分,微软会成为SAS云服务的首选云平台提供商,SAS的分析产品和行业解决方案随后也会被转移至Azure平台,这些内容都将为微软在医疗保健、金融服务和许多其他行业的客户带来附加价值。(新浪财经) ...

June 24, 2020 · 1 min · jiezi

一周信创舆情观察-68614

一、一周舆情要点 2020年将成为信创规模化落地元年。5月份以来,电信、金融行业公开招标中信创占比提升,目前地方政府已陆续启动招标,预计6~7月信创招标有望全面铺开。 美国“实体名单”影响扩大,哈工大、哈工程被禁用MATLAB软件,此举将进一步激活信创概念。 北京新基建提速,信创应用生态建设纳入规划。6月10日,北京披露新基建方案,聚焦“新型网络基础设施、数据智能基础设施、生态系统基础设施、科创平台基础设施、智慧应用基础设施、可信安全基础设施”六大方向。信创方面,《方案》提出依托信创园,提升研发底层软硬件协同研发能力,建设“两中心三平台”信创应用生态。 二、政策动态 1、工信部发布2020第一批行业标准制修订计划 工信部网站6月12日消息,根据工业和通信业行业标准制修订工作的总体安排,工信部编制完成2020年第一批行业标准制修订项目计划,并发布了《关于印发2020年第一批行业标准制修订项目计划的通知》。 制修订项目计划中包含5G及下一代移动统信标准项目计划表、人工智能标准项目计划表、工业互联网标准项目计划表和网络数据安全标准项目计划表等。 制修订项目计划中提到,2020年第一批共安排项目计划415项。其中制定287项,修订128项;重点专项标准177项、基础公益类标准39项、一般标准199项;产品类标准396项,节能与综合利用标准19项。(工信部网站) 2、北京披露新基建行动方案 聚焦生态系统基础设施等六大方向 6月9日,北京印发《关于加快培育壮大新业态新模式促进北京经济高质量发展的若干意见》,提出打造“1+5+N”的政策体系。作为“5方案”之首,《北京市加快新型基础设施建设行动方案(2020-2022年)》被视为促进北京经济平稳增长和高质量发展的重要举措。 此次披露的新基建行动方案,聚焦“新型网络基础设施、数据智能基础设施、生态系统基础设施、科创平台基础设施、智慧应用基础设施、可信安全基础设施”六大方向,暨“新网络、新要素、新生态、新平台、新应用、新安全”,实施30个重点任务。目标是到2022年,北京基本建成网络基础稳固、数据智能融合、产业生态完善、平台创新活跃、应用智慧丰富、安全可信可控的具有国际领先水平的新型基础设施。 其中在信创领域,《方案》提出要依托信创园,提升研发底层软硬件协同研发能力,建设“两中心三平台”信创应用生态。支持搭建支持多端多平台部署的大规模开源训练平台和高性能推理引擎,形成面向产业应用、覆盖多领域的工业级开源模型库。鼓励企业研发、运营开源代码托管平台,支持基于共享平台开展共享软件、智能算法、工业控制、网络安全等应用创新,促进形成协同研发和快速迭代创新生态。推动国家北斗创新应用综合示范区建设,打造“北斗+”融合应用生态圈。(经济日报) 三、重点舆情摘要 1、信创招投标提速 2020或成业绩兑现元年 资料来源:政府采购网 5月份以来,中国电信、中国移动等运营商和以农行、工行为代表的国有大行纷纷开启国产设备采购模式。兴业证券认为,金融、电信等行业业务复杂度高、风险容忍度低,因此对IT设备采购较为严苛,从目前信创招投标情况看,最难啃的金融、电信行业正在加速落地。 另外,根据近期各地政府公开的信息,部分省市已经启动招标。天风证券认为,6 月底至7月,党政等领域的信创招标有望全面铺开,今年将会成为信创规模化落地的第一年。软件方面,统信和麒麟将是操作系统市场主要厂商,统信在 PC 市场有望占据一定份额,行业市场统信优势突出,服务器市场后续将加大投入;办公软件金山一家独大;中间件领域东方通占优,但价格竞争压力加大。(天风观点) 四、地方动态 1、天津成立信息技术应用创新工作委员会 6月12日,天津市信息技术应用创新工作委员会成立。市信创工委会首任理事长、麒麟软件有限公司执行总裁孔金珠介绍,市信创工委会成立后,将在关键共性技术与标准、生态搭建与应用推广、人才培养等三个重点方面开展工作。(今晚报) 2、《杭州市强化数字赋能、推进“六新”发展行动方案》将于近日下发 6月14日,杭州市召开推进“六新”发展媒体交流会,会议透露,经过前期谋划研究,目前已形成《杭州市强化数字赋能、推进“六新”发展行动方案》。近期将由市委市政府下发实施。根据《方案》,杭州将在六个方面通过一系列举措,其中在推进新基建方面,提出要加快推进5G建设、加快绿色示范数据中心建设、加快建设空地一体无人系统、建设“云计算之城”、加快建设重大科学基础设施等5条举措。(钱江晚报) 3、泉州将建设12个新基建新经济基地 总投资2000多亿元 6月12日,泉州市举行新基建新经济基地建设比拼动员会。会议提到,泉州将建设12个新基建新经济基地,涉及新基建新经济项目总投资2000多亿元。12个新基建新经济基地分布在鲤城、丰泽、洛江、晋江、南安等8个县(市、区),包括传感智能制造产业基地、古城数字文创动漫基地、时空产业基地、智能装备制造集成电路基地、人机交互产业基地、数字福建(安溪)产业基地、“芯谷”南安基地、新型数字显示产业基地、软件与工业设计基地、知创产业基地、智慧物流产业基地、智能电网电器产业基地等。(闽南网泉州) 五、行业动态 1、美国“实体名单”影响扩大,哈工大、哈工程被禁用MATLAB软件 据机器之心等媒体报道,哈工大、哈工程师生使用的正版 MATLAB最近无法被激活了,已经激活的正版 MATLAB 跳出反激活的通知,继而显示授权许可无效,网页无法登录哈工大域名的账户。MathWorks方面回应称,刚接到通知,根据美国政府最新的进出口管制名单,无法再提供服务,后续请关注学校的通知。哈工大负责技术支持的老师回应表示,自2020年6月6日开始,因哈工大被列入美国商务部实体名单的原因,影响到了学校MATLAB的正常使用,目前正在和美国MathWorks公司方面进行积极沟通。(IT之家) 2、开源BeOS操作系统Haiku R1/beta2发布 开源 BeOS 操作系统 Haiku 在发布第一个 beta 版本 20 个月之后释出了第二个 beta 版本。BeOS 操作系统在 2001 年被 Palm 收购后停止开发,Haiku 项目在这之后不久正式启动,2002 年发布了首个版本,2012 年发布 Haiku R1 Alpha 4.1,六年后发布了 Haiku R1/beta1。beta2 相比 beta1 改进了硬件支持和整体稳定性。 ...

June 18, 2020 · 1 min · jiezi

操作系统之内存管理

操作系统内存管理一、内存管理策略1.背景基本硬件(基地址与界限地址) 地址绑定(编译时、加载时、 运行时) 逻辑地址空间与物理地址空间 动态加载 动态链接与共享库(与静态库对比) 2.交换(内存与磁盘间)维护着一个可运行进程就绪队列,进行内存与磁盘间线程的载入与存出。 3.连续内存分配内存分区之可变分区的思想,将内存分成一个个孔(hole),使用一张表维护hole的使用情况。 存在碎片问题(分为外碎片与内碎片) 首次适应--首个足够大的孔(50%规则,描述碎片多)最优适应--最小合适的孔最差适应--最大孔外部碎片大,解决思路有 紧缩 与 分页、分段(运行物理地址不连续的策略) 4.分段将内存分为不同长度的段,维护分段硬件支持段表 <段名称s,段偏移d> 5.分页物理内存分为固定大小的块,称为帧。逻辑内存也分为同样大小的块,称为页。 <页码p,页偏移> 与对应的页表 TLB 带Hash页表--转换表缓冲区 保护机制与共享页 6.页表结构补充分层页表 哈希页表(数组+链表) 倒置页表 二、虚拟内存管理1.背景使用虚拟内存来逻辑内存容量--分配出去但未使用的内存空间,通过伪分配实现扩容。 2.请求调页概念:仅在需要时,才加载页面。 调页程序--惰性变换器实现 一般缺页错误的处理很简单: 检查这个进程的内部表,以确认该引用是有效的还是无效的内存访问。如果引用无效,那么终止进程。如果引用有效但是没有调入内存,那么现在就调入。找到一个空闲帧。调度一个磁盘操作,以将所需页面读到刚分配的帧。磁盘读取完成,修改进程内部表和页表。以指示该页现在处于内存中。重新启动被陷入中断的指令。该进程能访问所需要的页面,就好像原来他就在内存中一样。 缺页处理的时间花费主要体现在:处理缺页中断、读入页面、重新启动进程 3.写时复制(父子进程间)4.页面置换 当用户进程在执行时,可能发生缺页错误。操作系统确定所需要页面的磁盘位置,但是却发现内存上没有空闲的帧。所有内存都在使用。此时,它会选择交换出一个进程,以释放它在所有帧并降低多道程序。 在没有空闲帧的情况下,那么就要查找当前不在使用的一个帧,并释放它,牺牲帧,他被换出到交换空间,并修改它的页表。可以看到当没有空闲帧的情况下,需要两个页面传输(一个传入,一个传出)。这种情况世界加倍了缺页错误处理时间,并增加了有效的访问时间。 为了减少置换的时间,系统提供了一个修改位,两者的关联采用硬件。每当一个页面内的任何字节被写入时,它的页面修改位会由硬件来设置,以表示该页面被修改过。当要选择一个页面置换时,它会先看这个页面或者帧有没有被修改过,如果没有修改过就不用将它换出,直接进行换入,将它的空间覆盖。 页面置换算法FIFO 先进先出OPT/MIN 最优置换LRU 最近最少使用近似LRU 额外引用位算法 (多位标志位)第二次机会算法(1位标志位)增强型第二次机会算法-分类(元组分类出最近使用与需要写回)基于计数 LFU 最不经常使用MFU 最经常使用搭配上页面缓冲算法--最近被淘汰的页面被放置在高速磁盘区,减少淘汰错误页面下次换回的代价 5.帧分配分配算法--平均与比例 全局分配与局部分配(区别,是否面向所有进程的内存暑假页) 6.系统抖动频繁发生页面置换 7.内存映射文件与IO

June 6, 2020 · 1 min · jiezi

操作系统与通用计算机组成原理简论

在学NIO的时候,需要用到一点操作系统和计算机组成原理的知识,于是就又复习了一下计算机组成原理和操作系统。可能一些程序员心中的程序执行模型是这样的: 在使用IO流复制文件的时候,都是认为程序将位于磁盘上的文件读入内存然后在输出的磁盘上指定的位置。这是一个相当粗糙而不精准的模型,在这个模型中CPU和操作系统被隐藏,好像根本就没有参与工作一样。程序并不能直接读取文件,它需要向操作系统的申请,操做系统会给程序回应。程序是无法直接接触到硬件的,在现代计算机中,一切资源都必须向操作系统申请。还有一些程序员认为32位操作系统最多只能够使用4GB(232)的RAM,而64位操作系统则最多只能使用264字节的RAM。这是一种谬误,要解释清楚这些问题,并没有那么简单。但是了解这些,将会让你成为一名大牛,你将看到隐藏在海面下的八分之七。 通用硬件组成 这张图是近期Intel系统产品族的模型,可能你还不大清楚这张模型图中有些名词的意思。但是不要担心,我将会为你逐个介绍。 总线 贯穿这个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间进行传递。通常总线被设计成传送定长的字节块,也就是字。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在大多数机器字长要么是4个字节(32位),要么是8个字节(64位)。 我们常说从磁盘加载进内存,那么磁盘和内存是如何交换信息的呢,就是通过I/O总线。I/O设备 I/O(输入/输出) 设备是系统与外部与世界的联系通道,是主存和外部设备(例如磁盘驱动器、终端和网络)之间复制数据的过程。输入操作是从I/O设备复制数据到主存,而输出操作是从主存复制到I/O设备。I/O是一种抽象的概念,网络从某种意义上来说,只是另一种I/O设备,是数据源和数据接收方。 每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器和适配器之间的区别主要在于它们的封装方式。控制器是I/O设备本身或者系统主板上的芯片组。而适配器则是一块插在主板插槽上的卡。无论如何,它们的功能都是在I/O总线与I/O设备之间传递信息。处理器 中央处理单元(CPU),简称处理器,是执行存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),或称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。 从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序程序计数器,使其指向下一条指令。处理器看上去是按照一个非常简单的指令执行模型来操作的,这个模型是由指令集架构决定的。 什么是指令集架构? 粗略的说这个就是我们所说的机器语言,但是要讲清楚指令集体系架构是什么并不容易,这不是本篇的主题,需要结合CPU去讲,会专门再开一门博客去讲。 在这个模型中,指令按照严格的顺序执行,而执行一条指令包含一系列的步骤。处理器从程序计数器指向的内存处读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC,使其指向下一条指令,这条并不一定和内存中刚刚执行的指令相邻。 这样的简单操作并不多,它们围绕着主存、寄存器文件(register file) 和算术/逻辑单元(ALU)进行。寄存器文件时一个小的存储设备,由一些单个字长的寄存器租场,每个寄存器都有唯一的名字。ALU计算新的数据和地址值。下面是一些简单操作的例子,CPU在指令的要求下可能会执行这些操作。加载: 从主存复制一个字节或者到一个字到寄存器,以覆盖寄存器原来的内容。存储: 从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖掉这个位置原来的内容操作: 把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖这个位置上原来的内容。跳转: 从指令本身中抽取一个字,并将这个字复制到PC中,以覆盖PC中原来的值。顺便提一下 USB也是总线: 通用串行总线。主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存储器(DRAM)芯片组成的。从逻辑上来说,存储器上是一个线性的字节数组,每个字节都有唯一的地址(数组索引),这些地址是从零开始的,突然想起了C语言的指针。操作系统简论与IO接口各位还记得hello world吗? 相信这是很多学习高级语言的人,写的第一个程序。 在键盘上输入文字在显式器上显示,然后程序被执行,在控制台输出。在这个过程中我们写的程序是没有直接访问显示器、磁盘、内存。取而代之的是,他们依靠操作系统的服务。这也是java中读文件的方法都是native方法的原因。在现代操作系统中,I/O是计算机完成各种功能的一个重要方面。处理器负责执行各种计算任务,并且通过内存总线操纵整个内存空间,但是仅仅这些还是不够的,还要有各种外部设备的参与才可使计算机做到真正"有用"。尽管这些设备的功能和用途各式各样,但是处理器利用了标准的接口技术,通过设备的控制器与他们打交道。因此,从硬件层面上,处理器支持的接口技术是计算机系统能够协作运行的基础。 从软件层面上,操作系统提供相应的软件来操作设备的控制器,并且定义对应的软件接口或系统服务。使得应用程序可以方便地操纵或使用外部设备。操作系统的I/O系统复杂而精巧的,我们不可能用一篇博客来完全讲清楚,以上引入的概念只是为了介绍程序的执行过程和程序在执行过程中读写文件的时候都发生了些什么。现代的高级语言设计的十分精巧,经常让一些程序员有一种错觉,觉得读写文件时,就是程序将文件读入内存,然后对文件做操作,然后输出到磁盘。但是这种模型十分经不起推敲,已经不能说是粗糙,应该是错误的。 我们可以将操作系统看成应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试必须经过操作系统。再强调一遍,所有应用程序对硬件的操作尝试必须经过操作系统。操作系统有两个基本功能: (1) 防止硬件被失控的程序滥用 (2) 向应用程序提供简单一致的机制来控制复杂而又通常不相同的低级硬件设备。 一个典型的I/O请求过程绝大多数I/O系统并不涉及I/O系统的所有组件。典型的I/O请求首先从"一个应用程序执行一个I/O相关的函数开始", 我们可以将其理解为程序调用操作系统提供的I/O接口,然后该请求将由I/O管理器、一个或多个设备驱动程序和HAL来处理。什么,你问什么是HAL? HAL: Hardware Abstraction Layer 硬件抽象层。最早由微软提出,微软发现,程序直接与硬件通信,是造成系统不稳定的主要原因。硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 程序读写文件时发生了什么?这里我不准备介绍I/O 设备是如何工作的,这是一个庞大的主题。只做概要描述,便于理解程序在执行时发起I/O请求,请求读写文件时,CPU从磁盘读数据时发生的步骤。CPU使用一种称为内存映射I/O(memory-mapped I/O)的技术向I/O设备发射命令。在使用内存映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保留的。每个这样的地址称为一个I/O端口(I/O port)。当一个设备连接到总线时,它与一个或多个端口相关联。 有了内存映射I/O(memory—mapped I/O)这个概念之后,我们接着来介绍CPU从磁盘数据的步骤。我们知道CPU的执行单位是指令。假设磁盘控制器被映射到某个端口,随后,CPU可能通过执行三个对地址0xa0的存储指令,发起磁盘读: 第一条指令是发送一个命令字,告诉磁盘发起一个读,同时还发送了其他的参数,例如当读完成时,是否中断CPU(如果你不懂什么是中断的话,没关系,等着我)。第二条指令指明应该读的逻辑块号。第三条指令指明应该存储磁盘山区内容的主存地址。 当CPU发出了请求之后,在磁盘执行读的时候,CPU出于等待状态,磁盘是很慢的,此时让CPU一直陷入等待是一种极大的浪费。操作系统的CPU调度器通常会让CPU去做其他事情。 在磁盘控制器收到来自CPU的读命令之后,它将逻辑块号翻译成一个扇区地址,读该扇区的内容,随后将这些内容直接传送到主存,不需要CPU的干涉。设备可以自己执行读或者写总线事务而不需要CPU的过程,我们称为直接内存访问(Direct Memory Access,DMA)。这种数据传统称为DMA传送(DMA transfer)。写到这里突然想起java NIO中的transferTo方法,高效的文件拷贝。试想如果是CPU再干涉,那么CPU就需要向内存发送写指令,而CPU不会被单个进程独占。 在DMA传送完成,磁盘扇区的内容被安全地存储在主存中以后,磁盘控制器通过给CPU发送一个中断信号来通知CPU。 操作系统的结构与CPU态结构接下来我们来讲程序执行模型,也就是进程,程序是如何被执行起来的。要介绍程序是如何执行的,我们首先要介绍操作系统。首先我们来认识现代操作系统的逻辑结构,那么什么是操作系统的逻辑结构呢? 那就是操作系统的设计和实现思路。一般来说有三种: 整体式结构整体式结构以模块为基本单位构建,将系统拆分成一个一个模块。 特点:- 模块设计、编码和调试独立- 模块调用自由- 模块通信多以全局变量形式完成缺点:信息传递随意,维护和更新困难。层次式结构层次结构的软件例子: TCP/IP协议栈 所有功能模块按照调用次序排成若干层,相邻层间只有单向依赖或单向调用。层次结构的优点: - 结构清晰,避免循环调用- 整体问题局部化,系统的正确性容易保证- 有利于操作系统的维护、扩充、移植。微内核结构(客户/服务器结构)操作系统= 微内核+核外服务器。 ...

June 6, 2020 · 1 min · jiezi