好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
在编程世界中,Linux 就是主流,不会 Linux 你就会格格不入
研究 Linux 内核代码,你能学到数据结构与设计模式的落地实践
了解 Linux 操作系统生态,能让你事半功倍地学会新技术
Linux 执行程序的方式
* 通过 shell 在交互命令行里面运行
* 后台运行
nohup command >out.file 2>&1 &
退出:ps -ef |grep 关键字 |awk '{print $2}'|xargs kill -9
* 以服务的方式运行
启动 systemctl start mysql
关闭 systemctl stop mysql
开机运行 systemctl enable mysql
之所以成为服务并且能够开机启动,是因为在Ubuntu /lib/systemd/system
centos /usr/lib/systemd/system
目录下会创建一个 XXX.service 的配置文件,里面定义了如何启动、如何关闭
CPU 和内存来来回回传数据,靠的都是总线。其实总线上主要有两类
数据,一个是地址数据,也就是我想拿内存中哪个位置的数据,这类总线叫地址总线
(Address Bus);另一类是真正的数据,这类总线叫数据总线(Data Bus)。
* 地址总线的位数,决定了能访问的地址范围到底有多广。例如只有两位,那 CPU 就只能认
00,01,10,11 四个位置,超过四个位置,就区分不出来了。位数越多,能够访问的位置
就越多,能管理的内存的范围也就越广。
* 而数据总线的位数,决定了一次能拿多少个数据进来。例如只有两位,那 CPU 一次只能从
内存拿两位数。要想拿八位,就要拿四次。位数越多,一次拿的数据就越多,访问速度也就
越快。
而 ROM 是只读的,上面早就固化了一些初始化的程序,也就是BIOS(Basic Input and Output System,基本输入输出系统)。
这个过程就是这样的:用户态 - 系统调用 - 保存寄存器 - 内核态执行系统调用 - 恢复寄存器 - 返回用户态,然后接着运行
这一节,我们讲了内核的初始化过程,主要做了以下几件事情:
各个职能部门的创建;
用户态祖先进程的创建;
内核态祖先进程的创建。
最终编译成为.o 文件,这就是 ELF 的第一种类型,可重定位文件(Relocatable File)。
二进制文件叫可执行文件,是 ELF 的第二种格式
动态链接库,就是 ELF 的第三种类型,共享对象文件(Shared Object)。
第一类是线程栈上的本地数据,比如函数执行过程中的局部变量。
第二类数据就是在整个进程里共享的全局数据。
第三类数据,线程私有数据(Thread Specific Data)
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*))
int pthread_setspecific(pthread_key_t key, const void *value)
void *pthread_getspecific(pthread_key_t key)