Linux-操作系统

操作系统的发展历史:

1、串行处理;

2、批处理;

3、多道程序设计;

4、分时系统;

5、实时系统。 

计算机组成:

总线:数据总线、地址总线、控制总线

操作系统对于进程的管理:

进程:运行中的程序。(在计算机中是一组有序指令、数据、资源的集合)

程序:存储在磁盘上的可执行文件。

计算机管理进程

1、管理内存上进程相关的数据;

2、管理的是进程的属性:pid、state、exit-code、优先级、程序计数器、程序上下文……

PCB(进程控制块):pid、state、exit-code、优先级、程序计数器、程序上下文……

僵死进程:PCB依旧保存,进程实体已经释放。

操作系统: 

                进程(进程/线程管理)、内存(内存管理方案)、磁盘(文件系统)

系统编程:

1、主函数的参数

int main (int argc, char  *argv[ ], char *envp[ ])

argc:(整型值)argv中传递的指针的个数(传递给main函数的参数个数)

argv:(字符指针数组)传递给主函数的参数列表

envp:(字符指针数组)传递给主函数的环境变量     PATH  LD_LIBRARY_PATH

2、缓冲区→缓存系统

输入缓冲区:scanf

输出缓冲区:printf

缓冲区输出条件:

1、程序结束(不能以_exit/_Exit结束);

2、遇到“\n”;

3、主动刷新fflush(stdout);

4、缓冲区满。

3、Linux文件操作函数  (open、read、write、close、lseek 、stat)

int open (const char *pathname, int flag, /*int mode*/)

pathname:指定打开文件的路径+文件名

flag:操作模式 O_RDONLY     O_WRONLY   O_RDWR     O_CREATE   O_APPEND

mode: 指定新创建文件的权限,只有在O_CREATE时,才需要

返回值:-1 出错

文件描述符:主要用于read  write   close   lseek

int read (int fd, void *buff ,int size);

fd: open 返回值 文件描述符

buff:指定获取的数据在程序中存储的起始位置

size:本次最多读取的字节个数,一般为缓冲区大小

返回值:-1 出错  成功返回读到的字节个数

int write (int fd ,void *buff, int datalen);

buff:指定需要写入文件的数据的起始位置

datalen:写入数据的长度

返回值:-1 出错  返回写入的字节个数

int close(int fd);

int lseek(int fd, int pos ,int flag);

pos:位置

flag:标记

4、系统调用函数与库函数的区别

库函数:在用户态调用,在用户态执行

系统调用函数:在用户态调用,在内核态执行

5、系统调用函数的执行流程(用户态切换内核态的过程)

1、调用系统调用函数→软中断

2、缺页异常→硬中断

硬中断:

硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。

1. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。

2. 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

3.对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。

软中断:

仅仅是由当前正在运行的进程所产生的。

1. 通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。

2. 软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。

3. 软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。

猜你喜欢

转载自blog.csdn.net/like_that/article/details/84931385