计算机系统
wangyhwyh753
生命在于不断的学习前进。忍得住虚无的诱惑和平凡的寂寞,受得了生活的苦难和精神的冷落。不为别人,只为得到自己应该得到的一生。
展开
-
程序运行调度
这两天一直在学习程序启动的过程,操作系统是如何处理的,这里做一个总结。我们知道,我们可以用高级语言如c或者C++编写程序。编译环境通过我们的设置,将程序代码和数据经过转换成二进制的机器码:exe或者dll。那么程序中的二进制数据怎么跑到cpu运算并得出结果的呢?什么是内存的静态分配和动态分配呢?首先,我们人工编译的代码是放到硬盘或者其他存储器中。当程序运行时,操作系统将会开辟进程并为进程分配一定的...原创 2018-03-23 19:22:03 · 750 阅读 · 0 评论 -
编译语言比较
现在我已经接触了几种不同语言,简单的做个总结。C语言,C++ 语言以及Qt语言都是类似的高级语言。只不过后两者相对于c拥有更多的库。C++将c语言中的class进行扩展,延伸出类,通过构造函数和析构函数来进行对象的创建和释放;同时根据属性和接口将语言由过程转变为以对象为核心,大大提高了设计的便利化。而Qt通过丰富的库可以进行友好的界面设计,拥有设计即所得并便于平台移植的优势。面向对象的语言在编...原创 2019-02-27 21:59:32 · 237 阅读 · 0 评论 -
中断机制
为什么需要中断?I/O设备(输入输出)是如何向用户发送信号呢?比如我按下了鼠标的左键,软件是如何感知呢?一种方法是cpu对所管理的硬件I/O设备进行轮询,不停的对硬件扫描。这样输入设备一旦按下左键,那么cpu就可以将鼠标左键按下事件传递给对应的应用程序。但是这会产生若干问题,首先如果cpu连接多个设备比如说n个鼠标,当第n个鼠标产生左键按下事件,而此时cpu正在扫描第一个鼠标,那么鼠标事件就不能及...原创 2018-03-28 23:04:12 · 1167 阅读 · 0 评论 -
虚拟内存
为什么需要虚拟内存? 我们知道程序编译成功后是放在硬盘或者磁盘上,但是程序的运行却需要加载在内存上。但是内存空间有限,当多个进程需要运行时,内存空间将难以承受。所以需要引入虚拟内存的概念,目的主要是为了解决这一问题。什么是虚拟内存? 虚拟内存是按照内存管理的方式在硬盘或磁盘上开辟一段内存,这个内存就是虚拟内存。虚拟内存的特点是什么?虚拟内存相当于从硬盘到内存的一个缓冲,...原创 2018-03-27 18:45:13 · 473 阅读 · 0 评论 -
缓冲机制
计算机为什么需要缓冲机制?如何实现缓冲呢?我们知道cpu的主频可以达到2.6GHz,这还是在单核的情况下,如果多核再加上超线程技术,cpu的计算主频可以更高。而普通的硬盘只有几十MHz,我们自己用的u盘如果3MHz就感觉可以了。可以看到cpu计算速度是硬盘等存储设备拷贝数据的几十甚至上百倍,如果cpu等待从硬盘的来的数据(硬盘存储数据而数据运算必须拷贝到内存)进行运算,不仅仅会极大的浪费资源还会影...原创 2018-04-02 20:14:57 · 1775 阅读 · 0 评论 -
纯虚类
什么是纯虚类?纯虚类有什么用?纯虚类就是至少包含一个没有具体实现的虚函数的类,但是该虚函数必须在被继承的子类中实现。virtual void Test(int *p) = 0;纯虚类主要是作为基类使用,被其他子类进行继承。这样做的好处是,指定不能实现的虚函数,使得每个子类中该函数都被定义。该类主要是用作接口规范,使得子类的行为有一个参考。...原创 2018-03-26 20:37:37 · 4252 阅读 · 0 评论 -
类的构造与析构函数
每个类都有构造函数和析构函数。即使用户创建的类,系统也会为该类创建默认的构造函数。构造函数不能是虚函数。在面向对象语言里,这两个函数特别重要。面向对象的语言里,其成员变量和函数都属于对象(除了静态全局变量和静态函数)。我们知道类不能够直接在定义时对其成员变量进行初始化,这部分工作一部分统一放到构造函数来完成(静态成员变量需要在类外进行初始化)。构造函数没有返回值,其函数名和类名相同。构造函数可以有...原创 2018-03-30 19:43:09 · 915 阅读 · 0 评论 -
GDI对象的选择与释放
GDI对象通过SelectObject来选择。GDI对象主要有以下几类。GDI对象产生方法销毁方法位图(HBITMAP)CreateBitmap,CreateBitmapIndirect,CreateCompatibleBitmap,CreateDIBitmap,CreateDIBSection,CreateDiscardableBitmapDeleteObject画刷(HBRUSH)Create...原创 2018-03-30 19:31:38 · 1409 阅读 · 0 评论 -
后台任务调度剖析
对于操作系统或者其他相关平台来说,在同一时间内有多个任务需要等待执行,那么作为服务端如何对这些任务进行响应调度是一个问题?假设处理系统或者平台只能一维调度,也就是说在一个时刻只能运行一个任务,那么我们就面临如何选择执行的问题了?这实际就是排队问题。最简单的方法就是谁先来先响应,这种调度方式能够很好的保证先来的请求得到响应。并且实现方式简单,不易发生冲突。但是这样调度方式会使得有紧急请求得不到响应,...原创 2018-03-30 18:33:26 · 1278 阅读 · 0 评论 -
内存管理
我们编写的程序在我们看来是一段段的语言,那么在计算机看来我们的代码又是什么样的呢?这就涉及到了编译器如何对代码进行排序的问题。其他编译环境不是很清楚,这里就以我最熟悉的VC编译器说明。32位的cpu最大访问能力是4G,编译器在编译代码时将文本和数据编译到指定的区域中。其中低2G作为客户独占区用以存储程序中的代码文本和数据段,高2G作为共享内核分区作为系统代码区。在最低的64k作为保护区,不能够向里...原创 2018-03-23 20:20:40 · 125 阅读 · 0 评论 -
进程与线程的关系
进程和线程没有严格的定义。这里仅仅给出彼此的相同和不同点。不同点:进程是操作系统资源分配的最小单位,在没有线程的情况下也是最小的调度单位。线程是任务调度的最小单位,可以作为一个独立的单元运行。进程至少包含一个线程,线程共享所属进程的资源。所以在一个进程中有多个进程时需要进行互斥,防止发生共享资源的冲突。线程自己不含有资源,但它可以使用所属进程的资源。进程切换时由于需要资源的切换,导致系统开销大增。...原创 2018-03-23 19:26:19 · 142 阅读 · 0 评论 -
开发机登陆主键证书错误
在登陆远程开发机时发现有如下错误@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I...原创 2019-06-26 10:32:54 · 169 阅读 · 0 评论