内存
2017-11-25 02:30
127 查看
一、磁盘顺序读取方式的效率:
(1)程序直接访问方式、循环检测IO方式:
以字节为单位
CPU和IO串行,每读一个字节(或字),CPU都需要不断检测状态寄存器的busy标志,当busy=1时,表示IO还没完成;当busy=0时,表示IO完成。此时读取一个字的过程才结束,接着读取下一个字。
(2)中断控制方式:
以字节为单位
循环检测先进些,IO设备和CPU可以并行工作,只有在开始IO和结束IO时,才需要CPU。但每次只能读取一个字。
(3)DMA方式:
以块为单位
Direct Memory
Access,直接存储器访问,比中断先进,每次可以读取一个块,而不是一个字。
(4)通道方式:
以块组为单位
比DMA先进,每次可以处理多个块,而不只是一个块。
二、进程间的通信方式:
管道: 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道: 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量 : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列 : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号: 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存 :
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
套接字( socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
三、链接库:
1.静态链接库:
特点: 装载执行速度快
优点: (1) 代码装载速度快,执行速度略比动态链接库快;
(2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地域等问题。
缺点: 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。
2.动态链接库:
特点: 共享、开发模式好、减少页面切换
优点:(1) 更加节省内存并减少页面交换;
(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;
(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;
(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
缺点: 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在。
如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。
如果使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。
当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。
四、分区分配方案:
在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理?
有四种:上邻,下邻,上下相邻,上下不相邻。
(1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(3)回收分区的上、下邻分区都是空闲的(空闲区个数为2),需要将三个空闲区合并成一个更大的空闲区(空闲区个数为1 ),然后修改空闲区表。
系统回收主存时,按道理,空闲区会加1,但是如果存在以下的两种情况,空闲区个数会有所不同:
(1)当回收的主存与已有的空闲区存在上邻或者下邻的情况,将回收的主存与已有的空闲区合并,空闲区的个数不变;
(2)当回收的主存与已有的空闲区存在上邻和下邻的情况,则回收的主存会将原来的空闲去中的两个空闲区合并成一个空闲区,即回收的主存起到了联通的作用,空闲区的个数不增,反而与之前相比,个数还减少了一个
(3)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。
(1)程序直接访问方式、循环检测IO方式:
以字节为单位
CPU和IO串行,每读一个字节(或字),CPU都需要不断检测状态寄存器的busy标志,当busy=1时,表示IO还没完成;当busy=0时,表示IO完成。此时读取一个字的过程才结束,接着读取下一个字。
(2)中断控制方式:
以字节为单位
循环检测先进些,IO设备和CPU可以并行工作,只有在开始IO和结束IO时,才需要CPU。但每次只能读取一个字。
(3)DMA方式:
以块为单位
Direct Memory
Access,直接存储器访问,比中断先进,每次可以读取一个块,而不是一个字。
(4)通道方式:
以块组为单位
比DMA先进,每次可以处理多个块,而不只是一个块。
二、进程间的通信方式:
管道: 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道: 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量 : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列 : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号: 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存 :
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
套接字( socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
三、链接库:
1.静态链接库:
特点: 装载执行速度快
优点: (1) 代码装载速度快,执行速度略比动态链接库快;
(2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地域等问题。
缺点: 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。
2.动态链接库:
特点: 共享、开发模式好、减少页面切换
优点:(1) 更加节省内存并减少页面交换;
(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;
(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;
(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
缺点: 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在。
如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。
如果使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。
当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。
四、分区分配方案:
在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理?
有四种:上邻,下邻,上下相邻,上下不相邻。
(1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(3)回收分区的上、下邻分区都是空闲的(空闲区个数为2),需要将三个空闲区合并成一个更大的空闲区(空闲区个数为1 ),然后修改空闲区表。
系统回收主存时,按道理,空闲区会加1,但是如果存在以下的两种情况,空闲区个数会有所不同:
(1)当回收的主存与已有的空闲区存在上邻或者下邻的情况,将回收的主存与已有的空闲区合并,空闲区的个数不变;
(2)当回收的主存与已有的空闲区存在上邻和下邻的情况,则回收的主存会将原来的空闲去中的两个空闲区合并成一个空闲区,即回收的主存起到了联通的作用,空闲区的个数不增,反而与之前相比,个数还减少了一个
(3)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。
相关文章推荐
- Android 限制启动应用最大使用内存,可供极限测试时使用
- HP-UX 的内存交换机制--交换Swap与伪交换Pseudo swap
- 共享内存映射之mmap()函数详解
- iOS 6.0不同版本内存警告的统一处理
- c语言内存模型
- Java虚拟机中内存模型和volatile型变量
- 内存分配方式
- java 某段代码或变量占用内存大小
- 【c++】指针参数是如何传递内存的
- 优化tableView中出现的图片切圆角导致离屏渲染(减少内存消耗)
- 设置Tomcat JVM虚拟机内存大小
- uc/os-II的内存改进与实现TLSF算法的详解,移植实现(三)
- C语言中内存对齐问题
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- Linux简单设备驱动(1):使用IO内存操作GPIO--LED
- 编写一个memmove函数,实现内存拷贝
- 新版诺顿仅需7MB内存 对PC性能影响最低
- 【已解决】mmdrv.exe进程占用CPU近100%,且占用内存持续增长
- 【orange】关于从软盘加载内核到内存的一点感悟
- C 语言中的内存分配介绍