目录
1.1 编程语言
1)低级语言
2)高级语言
1.2 内核 kernel
1.3 程序
1.4 进程
1.5 CPU 内存空间
1.1 编程语言
1)低级语言 #离机器越近语言
- #二进制机器指令
- #汇编语言 #ADD,R0,R1,ST...
2)高级语言 #离近人类越近的自然语言
- #编译型语言 #c,c++,go...
- #解释型语言 #c#,python,java,swift,basic...
1.2 内核 kernel
- # 是一个通用软件, 运行在硬件上, 不负责具体的工作, 只是协调各个程序, 将硬件资源所提供的硬件能力抽象成一个个系统调用(#system call), 系统调用过于底层(由上层的程序员决定它的表现形式)
- #将底层系统调用再次封装成更高级的接口, 这个高级接口就是库(library), 库没有程序的执行入口, 只能被调用(API #Application Program Interface)
- #在面向库的编程时, 应用程序写出来的程序接口叫 API, 如果编译成二进制格式, 这个接口叫 ABI(应用二进制接口)
- #执行用户代码的机制叫 "用户空间", 用户空间发起的系统调用, 执行内核代码的机制叫 "内核空间" (CPU 运行在用户空间)
1.3 程序
- # 程序可以通过系统调用直接运行在内核上 (执行效率更高, 权限更大) 也可以通过库调用来完成(使用库调用进行编程可能更简单)
- # 程序必须有执行入口(# 二进制文件开头处有一个特殊字符, 可以标识这个二进制程序的执行格式, 也称程序的魔数. 如:"!/bin/bash")
1.4 进程
进程的创建
- #当运行 "ls" 命令时, 就创建一个进程.
- #系统开机, 先把内核代码放在 CPU 上运行, 当内核接管一切后, 就和硬件没关系了, 内核负责启动进程, 它会派出一个使者来管理进程, 创建的第一个进程, 该进程就叫初始化进程, 后续用户空间的所有管理工作就右 init 这个使者来管.
- #进程分子进程, 和子子进程...
- #父进程由 fork 自身而来, 内核都有一个系统调用, 叫 fork. 父进程, 需要创建子进程时需要向内核发起请求, 子进程不能脱离父进程, 需要共享内存空间, 子进程有自己的 ID, 子进程需要修改进程空间数据时, 父进程就复制自己的一份数据给子进程, 这时子进程就可以修改空间数据, 这种进制叫 cow
- #子进程由父进程销毁
- #子进程处理数据时, 父进程以静默方式存在, 等子进程执行完成时, 子进程的使命也结束了, 即退出. 父进程继续执行其他任务
1.5 CPU 内存空间
- #CPU 级别:
- #CPU 有 4 个级别的保户机制(同心圆的 4 个环)
- #0 级环, 特权级别, 只有内核才能运行在特权模式下
- #中间两环系统保留
- #其他应用程序运行在最外环, 任何时候应用程序是不能访问内存中处于 0 级别的区域(CPU 的 0 级别会映射给内存的某一段处于保护的空间当中)
- #当多个 jobs 运行时, CPU 会分割成多个时间片, 当一个程序使用 1S 时, 暂停 (保户现场的机制) 在处理第二个程序的 1s, 两个程序交替执行.
- # 内存空间:
第一段: ROM, 固化在主板上
第二段: 载入内核(kernel space)
第三段: 其他应用程序共享
# 虚拟地址空间: 每一个程序运行时, 都假设自己有一个虚拟地址空间, 32 位系统为 4G,64 位系统即 "2^64", 真实情况下, 一个程序其实只占用几 M 空间而已
进程:
就是运行程序的实例, 它的生命周期就是程序的开始到结束.
来源: http://www.bubuko.com/infodetail-3332557.html