• 【计算机理论基础】


    main主程序

    main函数有三个参数

    * argc->主函数参数的个数
    * argv->字符数组 存放的参数内容
    * envp->字符数组 存放的环境变量(从父进程继承下来的环境变量)
    * 环境变量 envp 参数内容 argv都是以NULL结尾。
    
    • 1
    • 2
    • 3
    • 4

    环境变量相关命令

    添加环境变量:export LD_LIBRARY_PATH
    查看变量的值:echo $LD_LIBRARY_PATH
    清除指定的环境变量:unset LD_LIBRARY_PATH
    main函数参数测试:
    在这里插入图片描述
    以上程序运行结果如下:
    在这里插入图片描述
    参数内容可以通过编译main时在后直接加入参数 例:
    在这里插入图片描述
    环境变量测试:

    执行该代码便会在代码中找到所添加的环境变量:在这里插入图片描述
    在这里插入图片描述

    ps->bash

    用户操作计算机硬件 ,计算机硬件通过shell操作传递给内核函数调用。
    shell是用户和linux内核交互的接口程序。
    shell其实就是终端(在提示符输入命令,经过shell先解释后传递给内核)
    shell 通过$PATH (环境变量)寻找可执行程序(应用程序)。若找到可执行程序,可执行程序被分解为系统调用,传递给内核执行。
    bash-> born again shell (bash其实就是shell分类中的一种)
    在这里插入图片描述

    并行和并发

    在这里插入图片描述
    并行:在同一时刻能够同时执行多个进程(上图中两个进程),每核,CPU在每一时刻执行一个进程,所以要同时进行多个进程的运行,需要多核CPU。
    并发:在某一时间段,需要处理多个任务(进程)。单核CPU,在某一时刻只能处理一个任务,多个进程通过进程切换,进行执行。
    调度算法(时间片轮转法:比如三个程序 a,b,c单核CPU,首先a运行十秒,接下来去c后面排队,接下来b运行十秒,然后去排队,接下里c十秒进行排队,这样依次下去,等待每个程序运行结束。此处的10秒过大,实际上也就10MS,运行时因为时间太短,所以我们视觉上也就是一块运行,视觉上类似于并行,所以也叫伪并行)
    串行处理:多个任务,单核CPU,一个进程全部处理完成,接下来处理一个进程,等待处理完再处理下一个进程。

    printf

    数组默认值

    在这里插入图片描述
    看上图中的代码:我们再Windows上用编写以上代码,其中arr[n]中n首先会错误,在c++中可以运行,但是输出2号元素会输出随机值,但是在linux中数组可以出现变量(arr[n]可以使用),并且输出值为0.均为默认值,不会出现随机值。在这里插入图片描述

    缓存缓冲

    在这里插入图片描述
    执行该代码:会等待10秒钟才会输出hello,
    Windows:无缓存,Linux:有缓存,
    为什么等待10秒钟:首先printf中hello存入缓冲区中,遇到return 0,结束时会刷新缓冲区,就会输出hello
    刷新缓冲区:
    1.程序结束前,return exit _exit 退出
    2.碰见’\n’(强制刷新)
    3.碰见fflush 刷新缓冲区(强制刷新)
    4.缓冲区放满
    return exit _exit 三者的区别:
    return :关键字,仅仅为语言层面的应用,代表当前功能的结束。(比如画图进程,画一个圆,return便是画圆结束)
    exit:函数调用,系统级别,进程的退出(比如画图进程,exit便是画图进程结束)
    _exit:内核级别的函数,exit函数内部实现结束,调用_exit进程终止,(只结束程序,不会刷新缓冲区)
    exit(0)<==>fflush(stdout)+_exit(0)
    在这里插入图片描述

    linux内存

    物理内存和虚拟内存

    物理内存:真正存在的内存条
    虚拟内存:在硬盘上划分一块区域作为内存,划分的这一块内存称为虚拟内存。(物理内存不足用虚拟内存来替代)
    X86: 4G的寻址能力,地址线32根,
    CPU的地址线可以直接进行寻址的空间内存大小,比如8086只有20根地址线,其寻址空间便是1MB,也就是说8086能支持1MB的物理内存,即使我们安装了128M的内存条,也只能说8086只拥有1M的物理内存空间,同理32位的386以上的CPU,可以支持最大的4G的物理内存空间。

    物理内存和虚拟内存的区别

    虚拟内存和物理内存相反,是根据系统需要从因公安许你地匀出来的内存空间,是一种计算机系统内存管理技术,属于计算机程序,而物理内存作为硬件。因为有时候当你处理大的程序时,系统内存不够用,此时就会把硬盘当内存来用,来交换数据作为缓冲区,不过物理内存的处理速度时虚拟内存的30倍以上。
    虚拟内存提供的三个重要的能力:
    1) 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,根据需要在磁盘和主存之间来回传送数据,使得能够运行比内存大的多的进程。
    2) 它为每个进程提供了一致的地址空间,从而简化了存储器管理
    3) 它保护每个进程的地址空间不被其他进程破坏
    图解:
    在这里插入图片描述
    Linux:用户态 内核态 3:1
    Windous:2:2

    物理地址

    加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查。

    逻辑地址

    ​CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。

    页表

    一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。
    在这里插入图片描述

    计算机基本组成

    五大部件:1)运算器:也叫数逻辑单位,完成对数据的格中常规运算,如加减乘除,也包括逻辑运算,移位,比较等。
    2)控制器:他是整个计算机系统的控制中心,他指挥计算机各部分协调的工作,保证计算机按照预先规定的目标和步骤进行操作和处理。
    3)存储器:存储程序和各种数据。
    4)输入设备:把人所熟悉的信息比如:图片,声音,文字等转换位计算机能够识别的信息存储起来,(键盘)
    5)输出设备:把计算机能识别的信息转换为人能识别的信息,进程呈现(屏幕)。
    CPU(包含运算器和控制器) 内存 I/O设备之间由总线进行连接。
    系统总线:分为地址总线,地址总线,控制总线。
    地址总线:寻找地址。数据总线:运送数据。控制总线:控制地址总线和数据总线。

    计算机工作过程

    1.用户打开程序
    2.系统把程序代码段和数据段送入计算机的内存
    3.控制器从存储器中取指令
    4.控制器分析,执行指令,为取吓一跳指令做准备
    5.取下一条指令,分析执行,如此重复操作,直至执行完程序中全部指令,便可获得全部指令

    程序运行过程

    main.c 代码与数据 通过编译链接过程 加载到内存(主存)代码段.text 数据段.data,CPU(控制器)从主存上取 指令 执行,执行完当前指令,继续下一条指令,继续执行。循环往复

    进程概述

    进程:一个正在运行的程序。进程=程序+数据+PCB。
    PCB:进程控制块,是进程存在的唯一标识。用来描述进程的属性信息。系统是根据PCB来对并发执行的进程进行控制和管理的。
    一个程序的启动,先出现PCB,再有进程。一个进程的消失,先进行进程实体的消失,接下来才会有伴随着PCB的销毁。
    系统正在运行的程序称为进程。是操作系统资源分配和调度的基本单位。
    进程状态:在这里插入图片描述

  • 相关阅读:
    Apt 和 Apt-get - 使用哪一个?
    局域网综合设计-----计算机网络
    【神经网络与深度学习】概率神经网络PNN
    Spring AOP(面向切面编程)简介说明
    python 集合
    《数据结构》复试问答题总结
    效率系列(九) macOS入门各式快捷操作
    光电数鸡算法《java》
    关于使用图表控件LightningChart的十大常见问题及解答
    【顶顶通呼叫中心中间件(mod_cti 基于 FreeSWITCH)-拨号方案和路由配置】
  • 原文地址:https://blog.csdn.net/m0_56246173/article/details/127724477