Table of Contents:

开篇词 | 为什么要学习Linux操作系统?

在编程世界中,Linux 就是主流,不会 Linux 你就会格格不入
研究 Linux 内核代码,你能学到数据结构与设计模式的落地实践
了解 Linux 操作系统生态,能让你事半功倍地学会新技术

01丨入学测验:你究竟对Linux操作系统了解多少?

02 | 学习路径:爬过这六个陡坡,你就能对Linux了如指掌

03 | 你可以把Linux内核当成一家软件外包公司的老板


04 | 快速上手几个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 的配置文件,里面定义了如何启动、如何关闭

05 | 学会几个系统调用:咱们公司能接哪些类型的项目?

06 | x86架构:有了开放的架构,才能打造开放的营商环境


CPU 和内存来来回回传数据,靠的都是总线。其实总线上主要有两类
数据,一个是地址数据,也就是我想拿内存中哪个位置的数据,这类总线叫地址总线
(Address Bus);另一类是真正的数据,这类总线叫数据总线(Data Bus)。
* 地址总线的位数,决定了能访问的地址范围到底有多广。例如只有两位,那 CPU 就只能认
00,01,10,11 四个位置,超过四个位置,就区分不出来了。位数越多,能够访问的位置
就越多,能管理的内存的范围也就越广。
* 而数据总线的位数,决定了一次能拿多少个数据进来。例如只有两位,那 CPU 一次只能从
内存拿两位数。要想拿八位,就要拿四次。位数越多,一次拿的数据就越多,访问速度也就
越快。

07 | 从BIOS到bootloader:创业伊始,有活儿老板自己上

而 ROM 是只读的,上面早就固化了一些初始化的程序,也就是BIOS(Basic Input and Output System,基本输入输出系统)。

08 | 内核初始化:生意做大了就得成立公司

这个过程就是这样的:用户态 - 系统调用 - 保存寄存器 - 内核态执行系统调用 - 恢复寄存器 - 返回用户态,然后接着运行
这一节,我们讲了内核的初始化过程,主要做了以下几件事情:
各个职能部门的创建;
用户态祖先进程的创建;
内核态祖先进程的创建。

09 | 系统调用:公司成立好了就要开始接项目

10 | 进程:公司接这么多项目,如何管?

最终编译成为.o 文件,这就是 ELF 的第一种类型,可重定位文件(Relocatable File)。
二进制文件叫可执行文件,是 ELF 的第二种格式
动态链接库,就是 ELF 的第三种类型,共享对象文件(Shared Object)。

11 | 线程:如何让复杂的项目并行执行?

如何创建线程?

线程的数据

第一类是线程栈上的本地数据,比如函数执行过程中的局部变量。
第二类数据就是在整个进程里共享的全局数据。
第三类数据,线程私有数据(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)

mutex

条件变量