Linux 下的c++学习(四)

1. Linux 系统级理解

1. 1 何为操作系统(OS)?

       OS是统一管理电脑硬件与软件资源的程序,或者说是计算机软件与硬件联通的桥梁。同时也是计算机系统的内核。主要包括五大功能:进程管理,内存管理,设备管理,文件管理,作业管理。

       Linux 系统主要被应用于服务器端、嵌入式开发和 PC 桌面 3 大领域。本文涉及到OS的内存管理与文件管理,主要介绍这两部分内容。

1.2 内存管理

       内存是计算机很重要的一个资源,因为程序只有被加载到内存中才可以运行;此外,CPU所需要的指令与数据也都是来自内存的。可以说,内存是影响计算机性能的一个很重要的因素。总的来说,操作系统内存管理包括物理内存管理虚拟内存管理。

       计算机存储体系包括CPU内存(寄存器与高速缓存)与CPU外存(主存,磁盘),而我们通常所说的内存、外存是根据存储器的划分:内存的速度较外存的速度快(主存),并且内存具有“掉电信息全部消失”的特性,而外存则具有“掉电信息也不会丢失”的特性(磁盘)。显然内存,外存都属于CPU外存。存储体系:

          1. 寄存器:CPU内部,主要存储底层指令与操作。速度最快。

          2. 高速缓存:快速、昂贵、易变,位于CPU与内存之间的临时存储器,主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾。

          3. 主存储器(RAM): 内存主要部分,掉电擦出数据。计算机运行速度与内存相关。

          4. 磁盘(ROM): 外存主要内容,掉电不擦除。  

       物理内存=运行内存:通俗的讲就是指安装内存条而获得的临时储存空间。主要作用是在计算机运行时为操作系统和各种程序提供临时储存。 

       这里需要指出:程序员编程是面向CPU的,不针对物理内存。程序运行由操作系统去管理调用运行内存实现。编程所对应的程序内存空间通常指4G的虚拟内存空间(即我们的逻辑空间)。

       虚拟内存:指的是把硬盘中的一部分空间用来当做内存使用。虚存空间本身不存在。主要是为了解决计算机在运行较大的程序时内存不足的情况。      

        至于虚拟内存与物理内存的页表映射关系,这里不展开。 

思考:虚拟内存存在的价值?

          32位机对应内存最大空间为2^32 = 4G,如果使用物理空间承载多个进程,则每个进程都吃4G,这样就需要排队实现,且每一个进程对内存的利用率也不高 。总之就是效率低。虚拟空间则每个进程分配4G虚拟内存,多个进程运行是可同时瓜分实际存在的物理内存,避免了资源与时间的浪费。效率瞬间提高。

1.3 相关概念解释

         1. 冯诺依曼结构:存储器+控制器+运算器:CPU+ 输入输出设备。在冯结构中,一个进程必须有:代码段,堆栈段,数据段。前面说明了进程和程序的区别,这里应该可以理解。

         堆栈段:函数内部的局部变量提供存储空间及暂时存储区。

        2. 堆栈之区别:1) 大小区别:堆大栈小。2) 效率:堆效率低栈高。 3) 内存分配:栈系统分配,堆人工手动分配。 4) 结构:堆-树结构,栈-线性结构:先进后出 5) 生长方向:栈向下堆向上。 6) 存储内5. 共享库:容:栈-PC地址、函数局部变量、函数参数。堆-new对象。

int c = new int[3];
// c 栈区(存储的地址)长度为3的数组存储堆区。

       3.  数据段

         全局初始化数据区:存放全局变量、静态数据、常量。

         未初始化数据区BSS区:存入的是全局未初始化变量。

       4. 代码段

           存放CPU执行的机器指令(machine instructions)。通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存中有一份代码即可。

       5. 共享库:就是之前学习的静态库、动态库存放区。

2. IO函数-文件操作

2.1 基本介绍

      这里涉及两方面内容,OS文件管理与内存管理。至于文件系统的内核组成,不是我们关注内容,这里主要学习简单的文件操作。

        文件结构存储于磁盘中,包括各级目录等,我们常用shell创建及桌面创建是由系统封装提供的应用,但如果没有这些,我们就需要通过编程实现。对于文件读写操作,linux提供了两种方式,一个是系统调用,即OS提供的API接口:open,write,read,lseek,close,...。另一个是标准c库的文件读写,c库函数:fopen,fwrite,... 底层需要调用OS接口。关系如下

 值得注意的是:c库添加了一个缓存区,类似于高速缓存的作用,提高读写效率。本文主要学习os系统调用函数:

       系统调用说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。

 

2.2 实例

参考:https://www.linuxidc.com/Linux/2016-11/137612.htm

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值