Linux进阶---第一篇
1.基础复习1). Linux 目录结构/ 根/boot 存放系统内核及启动相关的文件,类似于windows的C盘/bin 存放常用的命令(二进制可执行程序)/lib 存放库文件/etc 存放系统的配置文件/home 家目录(所有普通用户的家目录)/root 存放管理员的家目录/usr 存放系统应用文档和程序例如:QQ 微信/dev 存放我们的设备文件/proc 存放虚拟文件系统目录,保存进程在内
目录
1.基础复习
1). Linux 目录结构
/ 根
/boot 存放系统内核及启动相关的文件,类似于windows的C盘
/bin 存放常用的命令(二进制可执行程序)
/lib 存放库文件
/etc 存放系统的配置文件
/home 家目录(所有普通用户的家目录)
/root 存放管理员的家目录
/usr 存放系统应用文档和程序 例如:QQ 微信
/dev 存放我们的设备文件
/proc 存放虚拟文件系统目录,保存进程在内存中的信息
/mnt 临时挂载点
2). 文件类型
普通文件 -
目录文件 d ==》 windows 的文件夹
管道文件 p
链接文件 i
设备文件 c,d
套接字文件 s
windows上所有能拷贝进Linux的文件(照片,电影,pdf,exe...),都是Linux里的普通文件
3). 权限 chmod
r (读) w(写) x(执行)
4) 命令:
操作文件:cp,rm,mv,more,less,head,tail,vi/vim
mkdir,cat,touch,cd,pwd
进程:ps (显示运行的程序) 结束进程:kill
& :后台运行进程 jobs:查看后台运行的进程
top:查看系统的运行的进程,cpu利用率等等,类似于windows的任务管理器
5)如果要直接运行 可执行程序
则需要把可执行程序移动到 /bin 目录下,系统是从/bin这个目录下开始找二进制的可执行文件
6) 可执行程序的标准存放路径 --- $PATH
7)静态库和共享课
静态库:libxx.a
共享库:libxx.so
8)静态库和共享库的区别:
静态库是在编译链接生成可执行程序时,把库里的方法直接放到可执行程序里,作为可执行程序的一部分
共享库:在运行可执行程序时,动态去链接
通过静态库编写的程序,放在任意计算机都可执行
通过静态库编写的程序,只有计算机上存在这些共享库才能被执行
9)可通过命令 ldd 查看可执行程序用到了那些共享库
2. 头文件存放位置
3.printf
1).存在 \n时
先打印 hello world 再睡眠3秒钟
2).不在存在\n时
先睡眠3秒再打印 hello world
3)prntf为什么需要缓冲区?
在屏幕打印出数据时,是把数据交给内核,内核帮助我们去打印,如果没有缓冲区,一直频繁的切换用户态和内核态,让内核去打印,开销太大,效率太低。
4) printf缓冲区的作用
为了避免开销太大,并且提高效率,我们设置缓冲区,用来存储将将要打印的数据。
5)刷新缓冲区
a:缓冲区放满(完全缓冲)
b:缓冲区未满(行缓冲),printf里的\n会强制刷新缓冲区,将此行数据送到内核,也可通过fflush (stdout)强制刷新
c: 程序结束时
exit ---> 1. 刷新缓冲区
2.调用_exit(),退出整个程序
6)缓冲区的大小
一般为0.5k或者4k
4.主函数的参数
1)获取外部信息 char* argv[ ]
主函数的第一个参数内容是自己的名字, 所以主函数至少会有一个参数内容
多个参数
2) 环境变量 char* envp
从第一个元素开始填充,最后一个元素赋值为NULL
5.常识
1)冯诺依曼结构计算机---五大组成部分:控制器,运算器,存储器,输入输出设备
2)总线:地址总线,数据总线,控制总线
3)内存由内核(操作系统)进行管理分配
4)操作系统:管理计算机的软硬件资源,为用户提供交互的接口
6. 内存
操作系统在进行内存管理时,会将内存分为若干页进行管理,一页是4k/8k
假设内存为4G,1页为4K,那么可以划分为2^20页
物理内存4G,会被划分为2^20 物理页,把程序加载到内存时,也会把程序进行划分,4k的程序作为1页,存放在物理页中
7.程序在内存中的存储
程序在内存中并不是连续存储的,物理页的那一页空闲就会被操作系统随机分配用来存储程序,所以为了清楚每一页程序在物理内存中的位置,通过页表来记录每一页程序的编号所对应的物理页的编号,再通过偏移量的计算,就能找到物理页上每个数据的准确位置,便于进行访问或者修改
8. 地址
调试所用的地址为逻辑地址而不是物理地址
不采用物理地址,是因为我们不清楚那块物理地址所对应的空间是空闲的
使用逻辑地址时,我们不用考虑这些问题,操作系统会给我们分配空闲的物理空间,并且记录相应的逻辑地址和物理地址(页表),因此可以由逻辑地址推算出对应的物理地址(查页表计算偏移量)
9. 进程空间
在32位系统下,物理内存无论多少,进程地址空间都是4G
每个进程都有自己的进程地址空间,他们的进程地址空间之间没有什么联系,互不干预
10. 程序的划分
在页表记录时,是从代码段开始的页面开始记录的,所以一定不会从0页开始,上面只是为了方便理解,所以是从0开始的
代码段,数据段,堆,栈,内核,这五部分再进行页面划分时,是不会有任意两个出现在同一个页面的,在设计时,进行了有意的区分,一页未满,但跨入了下一个段时,则会将此页剩余部分浪费掉,在新页进行下一个段的划分
11.进程
操作系统给每个进程创建了一个进程控制块---PCB,对进程进行管理
PCB ---> struct task_struct Linux上用一个结构体来表示PCB
pid---唯一标识进程
status---表示进程的当前状态(就绪,运行,阻塞)
12.fork---复制进程
pid_t fork(void) 头文件 #include <unsitd.h>
两个进程同时进行
更多推荐
所有评论(0)