冯诺依曼体系结构:
这里的存储器指的是内存,在不考虑缓存的情况下,输入输出设备只能与内存进行数据写入或读取,不能直接与CPU“沟通”
内存可以与任何设备直接进行打交道
操作系统OS(基本的程序集合):是一款纯正“搞管理”的软件
1.内核(文件管理、进程管理、内存管理、驱动管理)
2.其他程序(shell程序、函数库等等)
设计OS的目的:
1.管理所有的硬件程序
2.为用户程序提供一个良好的执行环境
系统调用:在开发者的角度,操作系统可以看成是一个整体,但会暴露出一部分接口供上层开发者使用,这部分由操作系统提供的接口就叫系统调用
库函数:开发者对部分系统调用进行封装,就形成库,它是供更上层用户或者开发者进行二次开发
进程:课本上描述它是程序的一个执行实例,正在执行的一个程序等,但是站在内核的角度上,进程就是一个承担着分配系统资源(CPU时间、内存)的实体
操作系统对进程的管理方式:描述进程、组织进程
描述进程(PCB):是进程属性的集合,是一种叫做进程控制块的数据结构。在linux中描述进程的结构体叫task_struct,它被装载在RAM(内存)中并且包含着进程的信息。linux中所有运行在系统里的进程,都以task_struct链表的形式存放在内核里
进程的获取:getpid()获取子进程,getppid()获取父进程
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<sys/types.h>
4 int main()
5 {
6 printf("pid:%d",getpid());
7 printf("ppid:%d",getppid());
8 return 0 ;
9 }
进程的创建:fork(),函数返回值有两个,等于0为子进程,大于0为父进程,父子进程代码共享,数据各自开辟空间,私有一份
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 #include<sys/types.h>
5 int main()
6 {
7 int ret=fork();
8 if(ret<0)
9 {
10 perror("fork");
11 return 1;
12 }
13 else if(ret==0)
14 {
15 printf(" i am child :%d ret:%d",getpid(),ret);
16 }
17 else
18 {
19 printf("i am father : %d ret :%d",getpid(),ret);
20 }
21 sleep(1);
22 return 0;
23 }
进程的几种状态:
R(running):运行状态,但进程不一定正在运行,还可能在运行队列里
S(sleep):睡眠状态,意味着进程在等待事件完成(这里的睡眠状态有时候也叫做可中断睡眠)
D(disk sleep):磁盘休眠状态,这个状态的进程等待IO的结束,(有时候也叫做不可中断休眠)
T(stopped):停止状态,可以通过发送sigstop来给进程停止进程,这个被停止的进程可以通过发送sigcont来让进程继续运行
X(dead):死亡状态,只是一种返回状态,在任务列表里无法看见
进程状态修改:用kill将T状态改为R状态
kill -l 查看系统支持的信号列表
kill SIGSTOP pid
kill SIGCONT pid