操作系统的核心是内核
操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间
不管是内核空间还是用户空间,他们都处于虚拟空间中
linux使用两级保护机制:0级供内核使用,3级供用户程序使用
LINUX网络I/O模型
为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用
请求内核来协助完成I/O动作,而内核 会为每个I/O设备维护一个buffer
整个请求过程为: 用户进程发起请求,内核接受到请求后,从I/O设备中获取数据
到buffer中,再将buffer中的数据copy到用户进程的地址空间,该用户进程获取到
数据后再响应客户端。
在整个请求过程中,数据输入至buffer需要时间,而从buffer复制数据至进程也需要时间。
因此根据在这两段时间内等待方式的不同,I/O动作可以分为以下五种模式:
阻塞
非阻塞
I/O复用
信号驱动的I/O
异步I/O
================================================================================================》》》
=====================================》》》》》》》》》》》》》
================================================================================================》》》
下面是自己的一点理解
1、所谓的虚拟内存其实就是内存的一种管理方式,实现对于逻辑上对于内存容量的扩展,使用硬盘(文件)来模拟的内存空间,
2、虚拟地址空间是对于一个单一进程的概念,这个进程看到的将是地址从0000开始的整个内存空间,
问题一:
2个是不同的概念还是有相关的联系?我知道第二个针对的一个进程,但是虚拟内存针对的是什么?
难道仅仅是内存的管理方式,
还有一点疑问?
这个是我问我们老师的问题?
老师,内存分页机制是仅仅相对于虚拟内存 还是虚拟内存和物理内存都采用分页机制?、
这个是的老师的回答:
是对物理内存的分配方式,虚拟内存看到的都是一个一个的数据段,比如数据段,代码段,堆段,等等,
看不到分页,他也没必要看到
问题二:
不是分段和分页都是针对的虚拟内存的运行进制吗?不过一个是针对数据段进行置换,一个是针对一个一个的最小的页进行的置换,怎么一个是针对的物理内存,一个是针对虚拟内存?
=====================================================》
===================》
=====================================================》
页面有两种,一种叫在内存页面,一种叫不在内存页面
所以分页管理是虚拟内存管理的一部分
虚拟内存管理有两部分
1)分段管理
2)分页管理
一般来说,分段管理是操作系统的手段,通常用于管理进程等等
分页管理是针对系统物理内存,和进程虚拟内存的
内存管理是对系统物理内存,和进程虚拟内存做的调度与映射。
如果进程占用物理内存较多,而又暂时不用
那么会在进程管理中,被换出到硬盘上,从而让正在运行的进程,有物理内存可用。
进程实际得到的物理内存是不连续的
但是通过虚拟内存机制(分页管理机制)映射后, 他们被看成是连续的。
========================================================》
=================》
========================================================》
虚地址模式才是内存管理方式。虚拟内存是虚地址模式衍生的一种功能。
虚地址空间是对于内存管理器的,进程是对于操作系统的。多个进程使用同一个地址空间或者一个进程使用多个地址空间在实现上是没有什么问题的。
至少virtual memory pointer这个词是搜不到的。
页是虚拟地址和物理地址的映射单位,所以都是分页的。
分段是实地址模式的概念,16位x86 CPU上常规寄存器不足以对整个地址空间寻址,所以需要额外的段偏移量。虚地址模式只是借用实地址模式段的概念区分不同的虚地址空间,并不是真正意义的段。而且一般系统采用的flat模式,代码段、数据段、堆段对应同一个虚地址空间。
=============================================================