文章目录
🍭Linux学习笔记(6)
🍭冯诺依曼体系结构
🍊输入设备: 键盘、网卡、话筒
🍊存储器: 通常指的内存
存储器通常指的是内存,不考虑缓存,这里的CPU只能对内存进行读写,不能访问外设
🍊运算器和控制器 : CPU
🍊输出设备:显示器、网卡、音响
🍊先说结论:在冯诺依曼体系下,所有的设备都只能直接和内存打交道。
解释:在冯诺依曼体系下,输入输出设备,CPU(控制器和运算器)都只能和内存进行交互,即外设输入或输出数据,也只能写入内存或者从内存中读取
原因:相对CPU来说,输入输出设备的速度是比较慢的,而CPU处理数据的速度很快,如果不经过内存,就会导致不能完全发挥CPU的性能,也即木桶效应。
🍭简单介绍操作系统(operating system,简称OS)
层次图:
操作系统把代码转化为指令交给CPU执行
🍭进程
🍈进程概念:程序的一次执行过程
🍈PCB(process control block):进程控制块,可以看作是进程属性的集合
作用:描述进程,Linux系统下的PCB是task_struct
🍈社会上我们的身份证可以表示我们的身份,也就是我们的ID
Linu如何表示进程呢?
进程也有自己的ID,称作PID,通过PID就可以表示一个进程
假如Linux下我们写一段C代码:
test.c
#include<stdio.h>
#include<unistd.h>
int main()
{
int a;
a=1+1;
while(1)
{
printf("I am a process,pid::%d\n",getpid());
//getpid()是得到当前进程ID的一个函数
sleep(1);
}
return 0;
}
写完后,test.c编译链接生成可执行程序test,通过系统接口给到操作系统,操作系统新建一个进程来运行test.
🍈Linux下查看进程
🍍ps命令查看进程
🍒ps aux |grep test
上面就是进程的具体信息
可以和grep配合使用查找想看的进程,比如此时我们运行test
显然,26543就是test进程的ID了.
🍒ps axj
🍒 ps axj |head -数字 &&ps axj| grep 关键字
🍒 进程也有父进程,可以通过函数getppid()看到
#include<stdio.h>
#include<unistd.h>
int main()
{
int a;
a=1+1;
while(1)
{
printf("I am a process,pid::%d,my father is%d\n",getpid(),getppid());
sleep(1);
}
return 0;
}
运行:
pid就是当前进程的编号,这里就是27848,父进程的编号(PPID)是20197
🍍top 也可以看到进程信息
按q退出
🍍在 proc目录内也可以看到进程的相关信息
proc目录在根目录下
🍍cd /proc
cd 20197 进入20197,里面的文件就是进程属性的记录
🍍上下文数据:进程执行时cpu内的寄存器的数据
🍍进程切换的例子:优先级高的进程来了 时间片到了
🍍上下文的保存与恢复:场景就是切换进程
优先级高的进程来了,时间片到了都可以使得进程停止
🍍上下文的保存与恢复:场景就是切换进程
🍭末尾 📖
这篇文章很多地方没有讲的透彻,因为我也才刚接触操作系统,这篇博客仅作记录用,如果有错误麻烦指出,敬请海涵
如果有帮助的话麻烦点个赞鼓励一下!