本文是青训营前端训练营笔记的第一篇。
计算机网络
linux基础
思维导图
计算机五大基本单元
控制器、运算器、存储器单元、输入与输出
操作系统启动
实际上是一种固化在主板上的程序
1.BIOS
传统
2.UEFI
主流、优化
CHATGPT如是说:
BIOS(Basic Input/Output System)和UEFI(Unified Extensible Firmware Interface)是计算机启动时的两种不同的固件系统。
BIOS是一种早期的固件系统,它是由IBM在1980年代开发的。它是计算机启动过程中最早加载的程序,它负责初始化硬件设备、检测启动设备、加载操作系统引导程序等。但是,由于BIOS具有诸多限制,例如仅支持2.2TB以下硬盘、启动速度较慢等,所以后来逐渐被UEFI所取代。
UEFI是一种新型的固件系统,它是由Intel在2005年推出的。相比BIOS,UEFI具有许多优点,如支持2.2TB以上硬盘、启动速度更快、更加安全等。UEFI还支持图形化界面、网络启动等高级特性,同时也可以更加灵活地配置计算机启动项,使得系统启动更加可靠和高效。
linux内核
linux基本组成
内核
内核主要分为几个模块,关系如图:
所有模块都依赖进程调度,因为他们都需要依赖进程调度程序来挂起(暂停)或重新运行他们的进程
进程与调度
查看进程信息:
ps -ef | grep nginx
这个命令的意义是在Linux/Unix操作系统中查找所有运行着的名字包含
nginx的进程。
具体来说,这个命令分为两个部分,使用了管道符|将它们连接起来:
ps -ef:这个部分运行ps命令,用于列出当前所有正在运行的进程信息。-ef选项表示显示所有进程的详细信息,包括进程的PID(进程ID)、PPID(父进程ID)、CPU占用率、内存占用量、进程状态等。grep nginx:这个部分运行grep命令,在ps -ef的输出结果中查找包含nginx字符串的行。grep命令会输出所有匹配的行,这些行包含了正在运行的所有名字中包含nginx的进程的信息。
综合起来,ps -ef | grep nginx命令的作用就是列出所有正在运行的名字包含nginx的进程信息。这个命令在管理和监控nginx服务器时非常有用,可以快速地查找nginx进程,并查看进程的详细信息。
此外还有top命令,根据pid查看某个进程
kill 关闭某个进程
进程调度
static void __sched schedule(void)
{
struct task_struct *prev, *next; // 定义指向当前进程和下一个进程的指针
int cpu; // 定义 CPU 的编号
prev = current; // 将当前进程赋值给 prev
cpu = smp_processor_id(); // 获取当前 CPU 的编号
next = pick_next_task(cpu); // 调用 pick_next_task() 函数获取下一个进程
/* 切换到下一个进程 */
if (likely(prev != next)) { // 如果当前进程和下一个进程不同
prepare_task_switch(prev, next); // 准备切换到下一个进程
__switch_to(prev, next); // 切换到下一个进程
finish_task_switch(prev); // 完成进程切换
}
}
在 Linux 内核中,
task[0]进程是一个非常特殊的进程,它不允许被杀死。因为task[0]进程是唯一一个能够在 CPU 空闲时执行的进程,如果它被杀死了,那么系统就没有可用的进程来处理 CPU 的空闲时间了,这可能会导致系统性能下降。
因此,Linux 内核设计了一些保护措施,以确保 task[0] 进程不会被杀死。例如,在进程调度函数 schedule() 中,会特别对 task[0] 进程进行判断,如果下一个要执行的进程是 task[0],则会跳过该进程,直接选择下一个可执行进程。
需要注意的是,task[0] 进程的确非常特殊,如果不了解它的特殊作用和限制,可能会导致系统出现问题。因此,在编写系统代码时,需要特别小心,避免错误地处理 task[0] 进程。
原则:
一个核同一时间运行一个进程
文件系统
Linux根目录下的文件夹是整个Linux文件系统的基础,它们各自有不同的意义和用途。下面是一些常见的文件夹和它们的意义:
- /bin:存放二进制可执行文件,包括常用的命令和系统工具。
- /boot:存放启动系统时使用的文件,如Linux内核文件和启动管理器(boot loader)。
- /dev:存放设备文件,包括所有硬件设备和外部设备。
- /etc:存放系统的配置文件,包括用户账户信息、网络配置、软件包管理等。
- /home:存放用户的主目录(home directory),每个用户都有一个对应的子目录。
- /lib:存放共享库文件(shared libraries),这些库文件是许多程序所需要的运行时库文件。
- /media:自动挂载的设备的挂载点,如USB驱动器、CD-ROM、DVD等。
- /mnt:手动挂载的设备的挂载点,如文件共享服务器、网络文件系统(NFS)等。
- /opt:存放可选的应用程序和第三方软件包。
- /proc:虚拟文件系统,存放运行时内存和进程信息,以及系统和硬件信息。
- /root:超级用户(root)的主目录。
- /run:存放运行时文件,如系统启动时的PID文件、socket文件等。
- /sbin:存放系统管理员使用的命令和系统工具。
- /sys:虚拟文件系统,提供了访问内核数据结构的接口。
- /tmp:存放临时文件,所有用户都可以访问。
- /usr:存放用户程序和文件,如系统程序、库文件、用户文档等。
- /var:存放变量数据,如日志文件、邮件、数据库等。
虚拟文件系统(VFS)
为应用层提供一个操作的接口 ; 为文件系统提供一个接入的接口
文件的读取:
文件权限
● 用户账户:
普通用户账户:在系统中进行普通作业
超级用户账户:在系统中对普通用户和整个系统进行管理
● 用户组
标准组:可以容纳多个用户
私有组:只有用户自己
命令
使用 ls -l命令后,得到形如 -rw-r--r--的输出
其中,第一个字符表示文件类型,- 表示普通文件,d 表示目录,l 表示符号链接等等。后面 9 个字符分成三组,每组 3 个字符,分别表示文件所有者、文件所属组和其他用户的权限。每组权限字符由 r、w、x 或 - 组成,分别表示读、写、执行权限和无权限。
查看用户信息:
用户权限操作
sudo chmod o+w ./demo
sudo命令提升为root用户,其中,o 表示其他用户,+w 表示增加写权限。
应用程序
软件包管理
linux常用命令