当前位置: 首页 > news >正文

国内网站建设网站备案授权书怎么填

国内网站建设,网站备案授权书怎么填,建立企业网站的形式,猫扑网站开发的网游目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程#xff08;虚拟#xff09;地址空间的引入 3.2进程地址空间的布局和理解 …目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程虚拟地址空间的引入  3.2进程地址空间的布局和理解 ​3.3什么是地址空间 3.4地址空间如何进行区域划分 3.5进一步理解进程和进程地址空间 3.6页表的理解 四、Linux内核进程调度队列 4.1优先级 4.2活动队列 4.3过期队列 4.4active指针和expired指针 4.5总结 一、初步认识环境变量 1.1常见的环境变量 PATHLinux系统下的指令命令的默认搜索路径 HOME用户登录shell的默认主工作目录 SHELL当前Shell,它的值通常是/bin/bash 为什么我们运行自己的可执行程序需要加./而一些指令可以直接执行这是因为存在环境变量PATH它是Linux下指令的默认搜索路径当运行一个指令时操作系统会到PATH中去查找该指令的所在路径 当我们把我们可执行程序的路径添加到PATH中也可像指令一样直接执行不需要添加./ 和环境变量相关的指令 1. echo: 显示某个环境变量值 2. export: 设置一个新的环境变量 3. env: 显示所有环境变量 4. unset: 清除环境变量 5. set: 显示本地定义的shell变量和环境变 1.2环境变量的基本概念 环境变量是系统引入的一套namevalue形式的变量不同的环境变量具有不同的用途环境变量具有全局属性 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数  有了全局属性这个概念以下要引入命令行参数来解释这个概念  二、命令行参数 2.1通过命令行参数获取环境变量 main函数有三个参数int  agrc ,char*argv[ ] ,char*evn[ ] 当我们在输入各种指令运行各种程序时本质上输入的都是一个一个的字符串bash会根据空格将这些字符串一一划分argc就是用来记录划分字符串的个数的argv是一张叫作命令行参数的表本质上是一个指针数组里面存储的是被bash分割形成的一个个字符串的地址 为什么需要命令行参数表呢因为这样可以为我们的指令、软件、软件等提供命令行选项支持 命令行参数表是以NULL为结束的 实例通过argv查看命令行参数 实例通过命令行参数argc和agrv来进行选项的设置 main函数中还有一个参数evn它对应是一张环境变量表可以通过打印该表来查看系统的所以环境变量 通过比较可以发现子进程的环境变量和env展示出来的环境变量一模一样这就可以解释为什么环境变量具有全局属性了我们所运行的进程都是子进程bash本身在启动时会从操作系统的配置文件中读取环境变量 形成一张环境变量表这个表会被子进程的main函数参数接收也就是说子进程会继承父进程交给它的环境变量所有建立在父进程上的子进程都会有相同的一份环境变量 2.2本地变量和内建命令 本地变量只会在本bash内部有效不会被子进程继承  set可以查看所以变量环境变量本地变量 export可以把本地变量设置成成环境变量 子进程中也可以查找到一份 通过unset可清除设置的环境变量 我们知道任何程序和指令在运行时都是bash的子进程本地变量只对本bash内部有效那么这里就有一个问题了为什么使用echo可以显示出MY_VALUE的内容呢这里就要再引入一个新的概念内建命令 常规命令通过创建子进程完成的内建命令bash不创建子进程由bash自己执行类似bash通过调用自己内部实现的函数或者系统提供的函数比如echo、cd都属于内建命令比如我们在cd时改变的是bash下的工作目录并不会去改变子进程所在的目录模拟实现一个具有cd功能的指令--chdir系统提供的一个改变当前工作目录的函数 2.3环境变量的获取 第一种就是上面演示的通过命令行的第三个参数获取第二种是通过第三方变量environ获取 第三种是通过调用系统函数获取或者设置环境变量--getenv()和putenv() 三、进程地址空间 3.1进程虚拟地址空间的引入  观察下面代码的运行结果可以看到子进程对全局变量g_val1进行修改父进程和子进程输出变量的值不一样但是地址是一样的说明该变量所在的地址一定不是物理地址父子进程输出的变量在物理地址上看来也不是同一个变量我们在用C/C语言看到的也是虚拟地址真正的物理地址用户是看不见到由操作系统统一管理 操作系统必须负责物理地址和虚拟地址之间的映射那操作系统具体是如何做到的呢  3.2进程地址空间的布局和理解 结合fork() 初步理解地址进程空间 前面已经谈到fork()创建子进程成功会有两个返回值给父进程返回子进程的pid给子进程返回0。fork()之后创建的子进程在内存中除了有一个以父进程为模板拷贝的pcb数据结构还有一个从父进程拷贝下来的mm数据结构进程地址空间和一个页表页表中存着变量虚拟地址和物理地址的映射关系、权限字段、判断数据在内存还是磁盘的字段通过映射关系可以找到虚拟地址对应的物理地址 子进程刚创建的时候在mm中数据的虚拟地址和父进程是一样的我们打印看到的都是这个虚拟地址子进程刚拷贝父进程的数据结构内容的时候代码和数据都是共用的并且数据在页表中的权限会被设置为只读 由于代码是共享的那么在fork()return前子进程被创建好了return就会被父子进程各执行一次又由于return的实质就是在对变量进行写入这时候就相当于要对数据进行修改 当子进程和父进程有一方要对数据进行修改就会触发对数据的非法操作从而发生缺页中断此时操作系统就会重新在内存中开辟一块空间将要修改的数据拷贝一份作修改再重新建立映射关系这个过程也叫写时拷贝这样父子进程就做到了各自私有一份数据 我们上面代码所展示的结果地址一样变量值不一样这是因为打印出来的地址是虚拟地址子进程拷贝了父进程的数据结构内容所以他们的虚拟地址就是一样的变量值不一样是因为写时拷贝后虚拟地址在页表中映射的物理地址不一样找到的数据当然也就并不一样了。这两个原因结合就说明了我们所看到的现象 3.3什么是地址空间 地址总线排列组合形成的地址范围[0,2^32) 32根地址总线 3.4地址空间如何进行区域划分 进程地址空间本质上是描绘进程可视范围大小在内核上他是一个数据结构对象mm_struct也要被操作系统管理地址空间通过各个区域的star和end对区域进行线性区域划分在一个区域的范围内连续空间中每一个最小单元都有地址都可以被使用区域空间的调整本质上就是通过调整每个区域的star和end 3.5进一步理解进程和进程地址空间 目前为止我们所说的进程就是进程内核数据结构对象pcb,mm,页表程序的代码和数据可执行文件  为什么需要进程地址空间 让进程以统一的视角来看待内存如果进程直接和物理地址进行交互那么进程的pcb数据结构中就势必要存在各个数据的物理地址。一个进程的各个数据部分在物理内存中实际是乱序的但是有了地址空间mm_struct之后代码就在代码段数据就在数据段该在堆区的在堆区该在栈区的在栈区同时这些连续的虚拟地址再经过的页表映射到物理内存这样让进程数据地址从无序变有序让进程以统一的视角看待物理内存以及各个运行区域每个进程都会以为自己占有了整个系统的内存资源 拦截对内存的非法操作和异常访问进程地址空间让我们在访问内存的时候有一个转化的过程在这个过程中如果我们对内存进行了非法操作和访问那么就会被拦截物理内存不会收到影响进而保护了物理内存 有了进程地址空间和页表就可以做到将进程管理模块和内存管理模块进行解耦合进程在运行的时候不会关心操作系统是如何申请内存的对进程的管理和对内存的申请都是由操作系统来完成他们互不干扰操作系统不做任何浪费时间和空间的事情当一个进程申请了内存但是它又不立即使这块内存的时候就相当于占用了内存资源这时候操作系统会采用惰性加载的方式给该进程一个虚拟地址但在页表中并没有实际映射的物理地址也就是说进程看到的是已经开辟好的虚拟地址但在物理内存上并没有真的申请到空间当进程需要内存的时候找不到映射的物理地址触发缺页中断此时操作系统就会给它开辟空间建立映射关系。从而说明了pcb数据结构对象的创建先于可执行程序的加载 3.6页表的理解 页表不仅仅有虚拟地址和物理地址的映射还有对应的权限当一个进程要对一个数据修改时本质是通过虚拟地址找到对应物理内存的数据再修改当要修改某一个数据但是该数据在页表的所记录的权限只有rx仅仅允许只读那么就会修改动作就会被拦截直接报错程序崩溃修改这个动作就不会被允许 这也就是为什么一个程序崩溃时并不会影响其他进程因为崩溃的程序在虚拟内存页表层就已经被拦截操作系统会直接杀掉进程进而也就不会影响其他进程的运行 总结页表存在CPU的cr3寄存器物理地址进程在被CPU调度和离开CPU的时候都要带走寄存器里的数据 CPU在运行程序时为了获取数据就会通过cr3寄存器里的页表地址找到该进程的页表页表中的虚拟地址通过映射得到物理地址进而可以访问到物理内存同时会根据虚拟地址和物理地址的映射权限rwx来决定是否能对该物理内存进行操作如果非法操作该请求会被拦截操作系统会将此进程杀掉 三个实例体现页表的作用 进程的挂起是如何实现的前面说到页表中还存在一个用来判断数据是在内存还是在磁盘中的字段进程的挂起就是将该进程所对应的数据和代码换出到外设分区中那么这时候操作系统只需要通过修该字段就可以知道进程是否处于挂起状态 进程的独立性进程的独立性表现在每个进程都有自己私有的一份数据以及每个进程都有自己的一份mm_struct进程地址空间这就保证了每个进程只能访问自己的进程地址空间相互之间不得访问也就是说如果进程直接和物理内存打交道那么就可能访问到其他进程的数据但是由于进程地址空间的存在非法访问在页表层面就会被拦截确保了更个进程之间不会非法访问和篡改对方的数据 代码和字符常量区的数据为什么是只读的如果这写数据本身是只读的那么它就不可能从磁盘加载到内存中这边的只读是在页表层面上的只读它在页表中的权限被设置成只读当一个进程试图修改该部分的数据一样会被拦截 四、Linux内核进程调度队列 一个CPU拥有一个runqueue  4.1优先级 普通优先级100139我们都是普通的优先级想想nice值的取值范围可与之对应 实时优先级099不关心 4.2活动队列 所有时间片还没结束的进程都被放在活动队列本质上是一个指针数组数组的下标就表示优先级从100开始调度过程 从[0,140)开始遍历找到第一个优先级最高且非空的队列从该队列的第一个进程开始调度运行但由于逐一遍历数组的效率太低下了为了提高查找非空队列的效率可以采用位图的思想用5*32个比特位来队列是否为空 4.3过期队列 过期队列的结构和活动队列一样过期队列上放的都是时间片过期的队列当活动队列的进程都调度结束了那么swap交换两个队列的指针就可以对过期队列的进程进行时间片的重新计算等待调度运行 4.4active指针和expired指针 active指针指向活动队列expired指针指向过期队列当活动队列的进程全都调度完毕swap交换两个指针就相当于有了新的活动队列 4.5总结 在系统当中查找一个最合适调度的进程的时间复杂度是一个常数不随着进程增多而导致时间成本增 加我们称之为进程调度O(1)算法
http://www.hkea.cn/news/14454455/

相关文章:

  • 北京知名网站设计公司美团app开发费用
  • 基础微网站开发代理商农村电商网站建设方案
  • 东莞高端网站建设多少钱网站建设选题意义
  • 做网站站长一年能赚多少钱佛山专业网站建设公司推荐
  • 建网站做优化国外做测评的网站有哪些
  • h5网站显示的图标怎么做怎么制作一份自己的简历
  • 做个网站多少钱一年广州微网站建设效果
  • 北京平台网站建设哪家好本地一键搭建wordpress
  • 洛阳专业做网站多少钱jsq项目做网站
  • 做箱包关注哪个网站企业管理咨询行业很乱
  • 做网站前应该先出图比较好的企业网站
  • app应用下载网站源码郑州网站外包公司
  • 宠物网站建设论文传媒公司取名字大全
  • 辽宁省城乡和住房建设厅老网站域名注册查询批量
  • 海口房产网站建设seo网站关键词
  • 网站的按钮怎么做 视频临翔网站建设
  • 网站无障碍建设规定网站建设的实际价值
  • 网站关键词优化排名推荐青岛建站价格
  • 广州 网站的设计公司网址转换成短链接
  • 湖南做旅游网站应用下载app排行榜
  • 用响应式做旧书网站优酷视频网站源码
  • 鸣蝉建站平台网上推广平台
  • 做外贸的网站如何选择服务器网站无后台添加后台
  • 怎么用阿里云服务器做淘客网站公司商标标志设计
  • 网站运营目的网站怎么做文件下载
  • 宜兴建设局 网站网站开发是打代码吗
  • 照片网站源码模板建站
  • pc网站怎么建设流程网站建设培训东莞市
  • 怎么做网页 网站制作中国镇江网站
  • 哈尔滨网站托管可视化网页制作