输出设备:显示器,声卡,喇叭,硬盘
输入输出设备距离cpu远,所以一般由内存作为缓冲区实现预加载与预写入。
这一些列操作都是计算机操作系统(os)帮我们做的。
当登上qq和某位朋友开始聊天,发消息的数据流动过程:
我:输入设备(键盘)——>存储器——>cpu封包——>存储器——>网卡
朋友:输入设备(网卡)——>存储器——>cpu解包——>存储器——>显示器
任何计算机系统都包含一个基本程序的集合,成为操作系统(os),操作系统包括:
一款纯粹的"管理"软件
如何理解这个"管理"呢
管理:真正的管理是有"绝策权"的,与"执行权"不同。
任何管理都是先描述,在组织
先看下三层:
底层硬件:学生(被管理者)
驱动程序:导员,楼管,图书管理员(执行者)
操作系统:校长(管理者)
先描述。
struct stu
{
_name;
_sex;
_num;
_grades;
struct stu* next;
}
在组织:
Struct s1,s2,s3...
s1->next=s2;
s2->next=s3;
...
操作系统操作过于复杂,提供了系统调用接口,操作也有部分成本,所以提供了用户操作接口。
在我们实际进行编程或者开发的时候大多数用的都是lib库函数,有的库函数与硬件进行交互那么,他就会调用系统调用。
总结:
操作系统一般在硬盘根目录的boot目录。
运行起来的时候加载在内存当中
当一个程序运行起来被加载到内存的瞬间就成为了进程。
首先,运行程序,在另一个窗口通过ps命令查看这个进程
USER :进程的所属用户,
PID :进程的进程ID号,
%CPU :进程占用的 CPU资源 百分比,
%MEM :进程占用的 物理内存 百分比,
VSZ :进程使用掉的虚拟内存量 (Kbytes) ,
RSS :进程占用的固定的内存量 (Kbytes) ,
TTY :与进程相关联的终端(tty),?代表无关,tty1-tty6是本机上面的登入者程序,pts/0表示为由网络连接进主机的程序。
STAT :进程的状态,具体见2.1列出来的部分 ,
START :进程开始创建的时间 ,
TIME :进程使用的总cpu时间,
COMMAND : 进程对应的实际程序。
线运行程序,在另一个窗口通过ls /proc查找
可以看到第一种方法查找到mybin 的pid是9797,在第二种方法中右上角也找到了9797。那个9999是grep命令的进程。
通过ctrl+c终止程序,发现9797没有了。
再次运行呢,又重新分配了pid。(进程1一般都是操作系统)
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<sys/types.h>
4 int main()
5 {
6 while(1)
7 {
8 printf("pid : %d\n" , getpid());
9 printf("ppid : %d\n" ,getppid());
10 sleep(1);
11 }
12 }
~
~
- pid(进程id)
- ppid(父进程id)
运行查看对应的id。
终止,在重新运行,重新分配了pid。父进程没有变化
通过ps aux | grep 22717
查看进程,发现父进程始终是bash命令。shell为命令行解释器,bash是Linux中的命令行解释器(就和pcb是进程,struct task_struct是Linux中的进程一样)
struct task_struct
。struct task_struct
{
1.标识信息
2.运行信息,时间
3.优先级信息
4.上下文(假如程序暂时停止,等到他恢复的时候还要让他继续运行)
5.关系信息
6.信号
7.状态
}