linux基础

来源:互联网 发布:星球大战 全介绍 知乎 编辑:程序博客网 时间:2024/06/05 06:39
Linux是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
它能运行主要的UNIX工具软件、应用程序和网络协议。
继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。


linux的启动过程:
  1、启动第一步--加载BIOS
BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息等等
  2、启动第二步--读取MBR(硬盘上第0磁道第一个扇区)
即主引导记录,里面存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。
其实被复制到物理内存的内容就是Boot Loader
  3、启动第三步--Boot Loader
操作系统内核运行之前运行的一段小程序、可以初始化硬件设备、建立内存空间的映射图。
  4、启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。
系统将解压后的内核放置在内存之中,并调用start_kernel()来启动一系列的初始化函数和各种设备
  5、启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,进行初始化
  6、启动第六步--init进程执行rc.sysinit
Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序
  7、启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。


mmu的作用:
1、完成虚拟地址到物理地址之间的转换(LINUX系统只能使用虚拟地址,硬件使用物理地址)
2、内存的保护:设置特定内存块的访问属性(读、写、禁止访问)


shell变量:
$0-$n:输入参数
$#:参数的个数
$*、$@:参数的列表
$?:参数的返回值
$$:本身的PID  $!最后运行的PID


Makefile的使用
$^ :所有的依赖文件   $<:第一个依赖文件
$@:目标文件  $*:不包含扩展名的目标名称


malloc:
kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存
kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续
kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大


linux中内存的分配
1、代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。
代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。
2、数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配[1]的变量和全局变量。
3、BSS段:BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零。
4、堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。
当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存
5、栈:栈是用户存放程序临时创建的局部变量



0 0