adhq4pou1jc6401570431.png
# D4 u' n: I# L% j最近有小伙伴说没有收到当天的文章推送,这是因为微信改了推送机制,有一部分小伙伴刷不到当天的文章,一些比较实用的知识和信息,错过了就是错过了,建议大家加个星标??,就能第一时间收到推送。# u9 t6 X# J6 q. B0 i, f$ M
rpkp1my3ph16401570531.png
! g9 G- W% N& a3 k作者 | strongerHuang
, U$ U- E/ {! Z) \7 R$ }5 S% N微信公众号 | 嵌入式专栏2 ~; J$ w$ C# ~) }
Linux的诞生和早期发展1983年,理查德·斯托曼(Richard Stallman)在MIT人工智能实验室(AI Lab)创立了GNU计划,目标是创建一个完全自由的Unix类操作系统。在这个计划中,斯托曼和其他志愿者开发了GNU工具链(GCC、GDB、GNU Make等),但操作系统内核一直没有完成。$ o/ \/ I; {$ {8 n( ]: Y, r
1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开始编写一个新的操作系统内核,这个内核最初被称为“Freax”。他最初的目标只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。他将这个内核发布在Internet上,并开放源代码。随着全球各地的程序员参与开发,内核变得更加完善和稳定。这个内核最终被命名为Linux(Linus和Unix的组合)。2 I+ ?7 k4 Y; ^/ _! \$ W
Linux V0.01上热门最近,一篇名为《Exploring the internals of Linux v0.01》的博文,在 Reddit 和 Hacker News 都冲上了热门。* ]$ e9 U( L( c; p, Q! W; f+ d
o3rwwrkhpux6401570631.png
9 z) l1 Q( v4 o2 V+ k$ g" z
0psrcs5iwan6401570731.png
9 {2 k7 ^# S3 @1 O该博文主要是一篇解读 Linux 内核第一版开源代码的文章。地址:# n; W1 [7 X: V. G6 g, }
https://seiya.me/blog/reading-linux-v0.01解读Linux内核第一版(V0.01)仅 8670 行代码截止发文,最新版Linux内核是 v6.5-rc7,它由 36M 行代码组成。1 B1 H7 \: |+ y+ T4 {
然而,在1991年的第一版(V0.01)Linux内核只有8670行代码,包含注释才10239 行,可以说非常的“小巧”。: l9 i9 d( t5 P) a; c
v0.01系统调用是什么样的?v0.01 有 66 个系统调用:access acct alarm break brk chdir chmodchown chroot close creat dup dup2 execveexit fcntl fork fstat ftime getegid geteuidgetgid getpgrp setsid getpid getppidgetuid gtty ioctl kill link lock lseekmkdir mknod mount mpx nice open pausephys pipe prof ptrace read rename rmdirsetgid setpgid setuid setup signal statstime stty sync time times ulimit umaskumount uname unlink ustat utime waitpid write
0 }5 g2 d5 e2 V( k. U& f它支持读取、写入、创建和删除文件和目录。此外,还支持其他基本概念,如(权限)、(所有者)和(进程间通信)。chmod(2)chown(2)pipe(2)fork(2)并在那里。仅支持可执行格式。execve(2)a.out套接字的概念没有实现。因此,没有网络支持。某些功能未实现。他们只是返回:mount(2)ENOSYSint sys_mount(){ return -ENOSYS;}
0 X. B# V3 n9 J7 p4 h" g8 e针对 i386 进行了深度硬编码Linus与MINIX的作者Andrew S. Tanenbaum就操作系统的设计进行了一场非常著名的辩论:单片与微内核,哪个设计更好?Tanenbaum指出Linux是(或曾经)不便携的,因为它是针对Intel 386(i386)进行深度硬编码的:MINIX被设计为相当便携,并已从英特尔系列移植到680x0(Atari,Amiga,Macintosh),SPARC和NS32016。LINUX与80x86紧密相连。不是要走的路。确实如此。Linux v0.01 针对 i386 进行了深度硬编码。以下是 中的实现:strcpyinclude/string.h& f A6 M0 n+ A* ^- o# {& o, f' y, P6 v
extern inline char * strcpy(char * dest,const char *src){__asm__("cld4 P3 c" O+ V/ ^# o# G, _8 S
" "1: lodsb# U( G: v x; R; P. \7 L
" "stosb
; W8 W9 g' z2 X. u$ E " "testb %%al,%%al; W/ v! s2 m/ z) V* F+ z! w- Y
" "jne 1b" ::"S" (src),"D" (dest):"si","di","ax");return dest;}4 Z, }! j" Z, M7 g3 K
Linux 内核最初的名字为 "FREAX"Linus最初将他的内核命名为“FREAX”。Linux v0.01 中的 Makefile 仍然有以下注释:# Makefile for the FREAX-kernel.( i. D# _. T5 i5 R9 ]
v0.01 支持哪些文件系统?今天,Linux 支持各种文件系统,如 ext4、Btrfs 和 XFS等。; t9 h+ f+ a4 E6 d, u
! C" e+ E0 N) T! @$ j( x* b而v0.01支持的是 MINIX 文件系统。
! ]- f! W' a' S+ U' n5 m$ O6 {
' C/ j+ r& p$ N$ l! q. V' r有趣的是:ext(“扩展文件系统”)、ext2、 ext3、 ext4的前身,是受到MINIX文件系统的启发。
7 g! M( ^' X( t9 [% S% X' Y& ]5 R: D- `, E; f/ \7 ~/ {7 \0 Z/ u
Linux v0.01 的调度程序while (1) { c = -1; next = 0; i = NR_TASKS; p = &task[NR_TASKS]; while (--i) { if (!*--p) continue; if ((*p)->state == TASK_RUNNING && (*p)->counter > c) c = (*p)->counter, next = i; } if (c) break; for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) if (*p) (*p)->counter = ((*p)->counter >> 1) + (*p)->priority;}switch_to(next);
6 _, ~+ T) @4 f5 行代码实现 Kernel panicvolatile void panic(const char * s){ printk("Kernel panic: %s5 P6 }! }/ {- { s6 b
\r",s); for(;;);}
9 v9 T+ S$ n6 yLinus 当时没有 8MB RAM 的机器 * For those with more memory than 8 Mb - tough luck. I've * not got it, why should you :-) The source is here. Change * it. (Seriously - it shouldn't be too difficult. ..., n' Z2 [. P2 w7 h) `
Linus 当时没有 8MB RAM 的机器# If you don't have '-mstring-insns' in your gcc (and nobody but me has :-)# remove them from the CFLAGS defines.
6 O1 E3 i5 y0 M5 f' U% {好了,主要内容就解读到这里,感兴趣的老铁,可以下载Linux V0.01版本源码了解一下:+ O! m$ j9 V# G) _4 I+ I
https://cdn.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz编程资源&影视资源分享近期发现了一份 20T各类编程/影视/学习资源的腾讯文档,其中除了互联网编程学习资源外,还有不少影视资源,分享给各位:/ A4 `! N# V- [1 y
$ @0 |; r" H) Z3 a4 i0 l
skzmmwdszyu6401570832.png
1 w" j6 {) ]% s# _
* \3 K; k6 t! ]: Y* s- P. n
jjlze2v4r3g6401570932.png
: ^0 q e9 e1 A @7 D* _- x' y& ]7 Y% k- W8 {
up5rqqculja6401571033.png
9 L* e* k, F# U( M/ ^资源链接:https://docs.qq.com/sheet/DY3VPVklVaFFMcUZ4?tab=9h5afr (右键复制到浏览器地址栏打开),或者点击文末「阅读原文」也可查看。& o( ~* u9 d# ]$ D8 x: n$ P
欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些好用工具、白嫖福利、各类资源以及工作体验,还有一些内推机会。
; N. t, p* f) X- O1 h% |0 M: K
xtqp51ezkcq6401571133.png
* T' `- p1 l: S( ?: P; r加个微信,打开另一扇窗- Y! w. w8 M: h; \- X9 }* R8 a. u# Q
5x3uwahbmnr6401571233.gif
|