- 博客(26)
- 收藏
- 关注
转载 linux 多任务浅析(三)
前两篇已经说过了多任务的切换原理,留有一个问题,就是linux跳过了分段,逻辑地址总是等于线性地址那么是如何对进程进行隔离的?再说这个之前有几个概念1.物理内存--你可以直接理解为你的内存条。2.虚拟内存--假设你的电脑是32位的那么他的寻址空间为4G,但假设你的内存只有2G,如果有的程序分配到了超出2G的数据段怎么办?实际上x86体系会使用虚拟内存技术,他会将系...
2016-03-15 17:38:00 124
转载 linux 多任务浅析(二)
在一中我们说到了多任务即不同进程都有自己的独立的代码段,数据段,堆栈段。看似利用这个原理能将多任务隔离,但是他们各个段的起始地址又都是0,这就是很无语了,不过没关系,分页的时候会接着讲。这篇文章说一下多任务的切换。x86体系从硬件上支持任务间的切换,也就说实际上linux同一时间只是在运行一个任务,但是由于他可以在很短的时间在不同的任务间来回切换执行,我们感觉上他是多个任务一起...
2016-03-15 17:35:00 139
转载 linux各类地址浅析
1.物理地址硬件提供给软件的一个“抽象”,它与地址总线相对应,但是如果我们不考虑物理内存寻找的话,如果只在软件的角度看,姑且把物理地址和物理内存一一对应转载于:https://www.cnblogs.com/SimpleISP/p/5280401.html...
2016-03-15 17:34:00 141
转载 androidDecorView、自定义title
(友情提示这篇文章很多地方是以web开发类比的,木有web开发经验的童鞋看到了表怪我)大多时候我们看到的手机界面是这样的大致分为3部分 1.含有电池的行,就是status bar 是系统提供的状态栏 2.含通讯录的哪一行,title bar 一般也是系统默认提供给你。3.剩余的部分,我们在setContentViewd的时候设置的内容就是这一块。为啥s...
2016-03-15 17:30:00 203
转载 cgifastcgiphp-cgispawn-fcgiphp-fpm
1. cgi 和 fastcgi 是两个接口协议,用来实现脚本解释器跟webserver之间通信。2.php-cgi就是依赖于fastcgi编写的fastcgi程序,负责php解释器与nginx等的通信。3.fastcgi程序一般采用多进程“监听”同一端口的设计模式,多条进程常驻内存省去了每次对环境变量的解析等重复事情。spawn-fcgi和php-fpm就是用来对多个fas...
2016-03-15 17:29:00 96
转载 svn冲突发生原理
怎么理解svn的冲突呢?假设我们a,b两个文件同时是在svn://xx,检出来的,版本号都是7,此时我们修改a文件,行1(line1):1234改为12345提交,此时版本库里会有一个新的版本8,而且会有一个change记录,change记录大致是这样的:line 11234 ->12345,我们还有b文件,b的版本号此时是7,如果直接update,svn会根据这个c...
2016-03-15 17:29:00 180
转载 补码
补数 模: 45 两位数 那么 他的补数是100-45 = 55 其中模为100 145 三位数 那么 他的补数是1000-145 = 855其中模为1000 当两个数参与运算时模要以大数的模为准如,34-6 模就是100 有了补数就可以通过加法计算减法了,方法为减去一个数等于加上他的补数,结果忽略进位。 例如: 145-40 = 145+96...
2016-03-15 17:28:00 174
转载 函数调用原理
1.程序的执行实际是cpu执行指令。2.指令的执行在程序看来可以分为:内存和内存之间的互换,i/o操作(当然还有其他硬件调度暂时我们忽略)。3.一个进程我们一般会分这么几个内存段供他使用:代码段,数据段,堆栈段。编译的时候现将c文件编译为汇编然后根据汇编语言将程序载入内存,之后的操作就是操作内存了。4.真如3所言那么代码执行之前,变量的内存就应该确定了,否则...
2016-03-15 17:27:00 136
转载 float存储方式
(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数(2)M表示有效数字,大于等于1,小于2。(3)2^E表示指数位。举例来说,十进制的5.0,写成二进制是101.0,相当于1.01×2^2。那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。IEEE 754规定,对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字...
2016-03-15 17:27:00 157
转载 磁盘的读写和文件系统
磁盘:硬盘里面的结构如此,磁盘有很多个磁道,数据记录在磁道上。磁道会被划分为很多“块”,磁盘的读取是以“块”为基本单位的,这就是我们常看到的(block)这个单位的由来。那么磁头在读取的时候需要知道三个维度:盘面号,磁道号(柱面号),块号。I\O的读写时间消耗可以分为两块:1找到的block;2传输到内存。既然每次读是读一个块,那么我们可以考虑把相关的数据都放在一个块中,这样...
2016-03-15 17:26:00 315
转载 c+指针运算
main(){ charstr1[]={'a','b','c','d'}; charstr2= {{'1','e'},{'q','d'},{'g','h'}}; char*p_str1 = "123456"; printf("%c \r\n",str1); printf("%c \r\n",*(str1+1)); pri...
2016-03-15 17:25:00 80
转载 c语言(一)
其中有些偏差等以后再做修改。1.个人认为弄明白编译的原理是必要的,因为这关系到一个人对c语言的理解程度。2.首先可编程内存也就是说我们编程用到的内存会被分为这么几块:静态存储区,堆区和栈区。静态存储区:内存在程序编译的时候就已经分配好了,这块内存在整个运行期间都会存在,他主要存放静态数据,全局数据,常量。static声明的就是静态变量,const声明的就是常...
2016-03-15 17:24:00 78
转载 进程的内核态,用户态以及信号
1.进程间的切换很大程度上实际就是寄存中段基址的切换。2.计算机一般会把虚拟地址分为用户空间和内核空间。例如x86liunx虚拟地址空间前3G为用户空间,后1G是内核空间。3G用户空间给用户自己的进程调用,所有的进程分割利用这3G,1G的内核供系统调用用,而每一个进程都可以通过系统调用进入内核。3.理解进程进入内核这个概念。我们知道用户进程在自己的规定的用户空间(3G...
2016-03-15 17:23:00 298
转载 linux分页机制
1.分页的机制废弃了分段的设计,之前我们在博客中说过分段模式,即每一个进程有自己的段描述符,记录了自己的各个段基址。分页机制实际上废弃了这种设计模式。2.分页机制实际是把所有的段基址都设置为0,很显然如果关闭分页机制那么线性地址就是物理地址如果开启了就不能是直接的对应关系了。3.假设我们不知道分页机制怎么做,猜测一下他必须实现的功能有1.隔离不同进程的相同地址值,也就...
2016-03-15 17:22:00 88
转载 虚拟地址的高端内存
1.由来原因 虚拟地址分为用户空间和内核空间,用户空间为3G,高1G为内核空间。 用户空间的虚拟地址到实际物理地址的映射我们之前有谈及此处不赘述。 高1G(3G-4G)为虚拟内核空间这一空间的映射比较暴力,直接在物理内存 的0开始映射,一一对应。那么这样会有一个问题,1G的虚拟内存只能映射 1G的物理内存,对于大于1G的物理内存就无能为力了,我...
2016-03-15 17:21:00 124
转载 大话网络冲浪
我们假设现在还没有不同主机之间的数据包传送的策略,我们从头思考怎么怎么来完成这个事情。思考步骤:1.我们先来个简单的,假设我们有4台计算机,我们把他们互联在一起,我们暂时称为内网或是局域网。为了点对点我们需要为每一个计算机做一个唯一标示,于是我们弄了一个叫网卡的玩意,生产的时候给他个唯一标示,在一个局域网里面我们通过网络互联很容易就能得到所有机器的物理网卡,通过这个唯...
2016-03-15 17:20:00 73
转载 tcp+ip+http+以太网协议+socket++(概述)
这几个东西一点都不会混乱,因为都不是一层面上的东东,现在想想早期我之所以觉着有些搞不懂是因为对协议所处的抽象层不清楚,可见知识应该是从底层扎实走的。首先协议一点都不高大上,协议就是双方达成的必须共同遵守的规范,仅此而已。互联网之间的数据传输都是在以太网上的,数据在放在以太网之前需要做一些加工,假设我们要发一个http请求头,http请求头是应用层面上的,我们自己根据h...
2016-03-15 17:20:00 315
转载 文件映射mmap
磁盘与内存的映射就是文件映射,说这个问题之前我们先说下swap,因为这个问题让我很容易想起swap,linux swap 是交换分区的意思,在内存不够的情况下,操作系统先把内存与磁盘的swap区进行一个“映射”,然后把这些内存解放出来放入内存中,为之后的进程的腾出一块内存空间,等到自己的进程再次被唤醒时候,再把磁盘里面的内存换进来。这里有文件和内存...
2016-03-15 17:20:00 93
转载 select与epoll
select监听一组句柄fd_set,第一次调用的时候循环所有句柄对应的驱动函数xx_poll,socket的话就是sock_poll。循环遍历完毕之后会如果发现有可用的(活跃状态的)fd,则返回,返回的时候会返回活跃的fd个数,同时会把不活跃的fd在fd_set移除。如果循环fd_set一遍以后发现没有活跃的fd。假设此时socket在非阻塞模式下,那么selec...
2016-03-15 17:19:00 69
转载 http的无状态
理解http的无状态首先要明白什么是“状态”,这个很重要。我们知道http是请求应答模式的。请求肯定是客户端发起的,应答是服务端的响应。客户端和服务端交互活动的信息成为状态信息。如果这个状态信息被保存维护到了服务器,那么这个服务器就被叫做有状态服务器,因为有了这些保存信息就可以通过此信息影响之后的交互,比如用户的登陆转态,我第一次请求告诉服务端我要登陆了,服务端保存好了登陆信息...
2016-03-15 17:19:00 60
转载 c 编译链接
首先main是执行的入口,进入main才可以执行,main之外的都是一些全局变量或是函数的定义。c函数把每一个文件当作一个module对待,既然每一个文件就是一个模块(这个跟paython很像奥),那么模块势必有私有的属性方法和对外提供的属性方法,在c语言中一个文件中的变量和方法如果被extern修饰,那么这说明这个变量是引用的外部的模块的变量,通俗说这个变量就是起码两个模块间的...
2016-03-15 17:18:00 72
转载 c 虚拟地址的分区
c语言有函数,字符串常量 ,全局变量,局部变量 等等变量概念。在一段内存中区分出这么多概念很自然就会想到把内存分区了。c语言和其他语言一样都要被编译为简单的二进制,操作系统只是一个巨大的软件而已,linux操作系统为每一个进程分配了3G的虚拟用户空间,然后把3G的虚拟内存空间分段,以供c语言使用。栈 :函数运行时候使用的,注意递归太深的时候可能会超出栈的最...
2016-03-15 17:17:00 113
转载 树的旋转
在学习红黑树,树堆,平衡树的时候我们经常会看到一个树的操作---旋转。树的旋转之前也只是机械记忆而已,但机械记忆的东西终归不是自己的,这说明自己没有理解到其中的精髓。定义:树旋转是二叉树中一种子树调整操作,每一次旋转不会影响二叉树的中序遍历结果。二叉树的中序遍历结果可以用投影的方式快速得到,如图所示:如果这是一颗搜索树,那么中序遍历的顺序一定是自小而大的,这...
2016-03-15 17:17:00 157
转载 计算机原理简略总结(二)++中断
在说虚拟地址物理地址之前我们先说下中断上一章我们说了硬件可以通过控制总线给cpu传送一个中断信号,这个有非凡的意义。我们知道cpu的读写速度与硬件的读写速度不是一个数量级别的,比如我们让硬盘去读个文件,cpu怎么知道硬盘读完了呢?一种方式是不断的去查询硬件的状态寄存器,看看是否读完了,这种方式就是轮询唠,cpu傻傻得不断做重复的事情,这样cpu被毫无意义的占用了,其实想想解决方...
2016-03-15 17:16:00 90
转载 计算机原理简略总结(一)
所谓指令就是一组二进制,最初给计算机输入指令的时候就是用穿孔纸袋的,带孔为1无孔是0,扫描进计算机。指令通常由两个部分组成,操作码+地址码 ,很明显操作码就是读写之类的信息,地址码就是操作码要操作的对象在哪里。指令在计算机中实际就是电信号,假设一个硬件有4个引脚,他可以根据不同的引脚的电极性不同来发生不同的行为,每一个引脚都有正负两种情况,代表01,4个引脚就是有2的...
2016-03-15 17:15:00 108
转载 套接字地址族和种类
什么是地址族?我们一般在看socket编程的时候往往只关心tcp/ip相关的地址和通信方式,然而对于linux套接字来说,并不只有ip一种地址也不仅有tcp一种数据协议。通信我们要解决的最重要的两个问题,一个是定位目标,一个按传输数据。前者用地址解决,后者用协议解决。套接字的地址种类有很多种ip地址(192.168.2.3)是一种,还有其他的比如说unix地址(/dat...
2016-03-15 17:13:00 388
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人