码迷,mamicode.com
首页 > 系统相关 > 详细

《Linux操作系统分析》课程总结报告

时间:2021-05-24 07:08:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:压力测试工具   lazy   函数   系统文件   tin   左右   存在   read   文件操作   

1.精简Linux系统概念模型

1.1 Linux的体系结构

  Linux可以分为两部分,分别为用户空间和内核空间,以32位操作系统为例,Linux 默认情况下会将高地址的 1GB 空间分配给内核空间(地址为0xffffffff-0xc0000000),将剩下的3GB空间分配给用户空间。

技术图片  

    a)        用户空间包括:用户的应用程序、C库

    b)        内核空间包括:系统调用接口、内核(狭义内核)、平台架构相关的代码

1.2 Linux的内核结构

  Linux的内核结构分为以下7个部分:

    1)        系统调用接口(SCI):open、read、write等系统调用

    2)        进程管理(PM):创建进程、删除进程、调度进程等

    3)        内存管理(MM):内存分配、管理等

    4)        虚拟文件系统(VFS):为多种文件系统提供统一的操作接口

    5)        网络协议栈:提供各种网络协议

    6)         CPU架构相关代码(Arch):为的是提高至移植性

    7)        设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码

  系统调用

  Linux内核系统调用是指所有的操作系统在其内核里都有一些内建的函数,这些函数可以用来完成一些系统级别的功能。Linux系统使用的这样的函数。

  其过程如下,以open文件为例:

  1.程序调用open库函数。

  2.库函数通过swi指令陷入内核,硬件保存cpsr,pc。跳转到中断向量表中处理swi异常的表项。

  3.根据lr寄存器获取系统调用号,调用相应的系统调用sys_open。

  4.sys_open根据寄存器传递的参数(路径和文件操作权限),查找系统文件打开表,若是以存在此项,创建一个File结构,根据已经存在的表项填充关键字。若不存在,则根据路径进行查找,读取调用进程的root目录的inode节点,根据这个inode读取下一层的inode,递归,直到找到目标文件的inode。

  5.创建file数据结构,填充信息,并将inode读取进内存,创建inode数据结构,放入到inode表中,将file数据结构放入内核的系统文件打开表中,返回给用户程序。

  6.用户程序在进程文件打开表中分配一个空闲数组项保存file文件指针,并返回在进程文件打卡表中的对应下标索引,即文件描述符,至此完成文件的打开。

  进程管理

  linux操作系统是多任务系统,通过进程管理实现多个进程的公平调度尽可能提高系统的吞吐量、资源利用率。其中有以下部分:

  1. 进程描述符:在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(如父和子)。task_struct 位于 ./linux/include/linux/sched.h。在很多情况下,进程都是动态创建并由一个动态分配的 task_struct 表示。一个例外是init 进程本身,它总是存在并由一个静态分配的task_struct表示,参看 ./linux/arch/x86/kernel/init_task.c

  2.进程创建:用户空间内可以通过执行一个程序、或者在程序内调用fork(或exec)系统调用来创建进程,fork调用会导致创建一个子进程,而exec调用则会用新程序代替当前进程上下文。一个新进程的诞生还可以分别通过vfork()和clone()。fork、vfork和clone三个用户态函数均由libc库提供,它们分别会调用Linux内核提供的同名系统调用fork,vfork和clone。

  3.进程的状态:在操作系统原理中进程的有五种状态,分别为创建态、就绪态、运行态、阻塞态、终止态。在Linux系统中也有相应的状态,例如TASK_RUNNING:(R)对应运行态;TASK_INTERRUPTIBLE:(S)为睡眠状态;TASK_STOPPED为进程已中止执行等。

  4.进程的调度时机:1.进程的时间片用完。2.进程状态发生改变。3.高优先级进程从其他状态转换为就绪态或者高优先级进程被创建。4.系统调用或者中断处理退出。

2.分析影响程序执行性能的因素

  使用stress (系统压力测试工具)来模拟cpu使用繁忙情况,使用sysstat (监控分析系统性能的工具)来查看系统资源的使用情况

  使用指令stress --cpu 4 --timeout 600,模拟cpu繁忙的情况,可以看到cpu使用很严重。

技术图片

 

  接下来写一段的代码:

#include<stdio.h>
#include<time.h> 
int main(int argc, char const *argv[])
{
  /* code */
  duoble s = 1000000;
  clock_t start,finish; // 定义时间
  start=clock();    
  for(int j=0;j<100000;j++){
    for(int i=0;i<10000;++i){
      s = s/i;
    }
  }
  finish=clock();
  printf("time=%lf\n",(double)(finish-start));//输出耗时
  return 0;
}

  分别在cpu繁忙情况和cpu空闲情况查看程序耗时:

  cpu空闲:

技术图片

  cpu繁忙:

技术图片

  可以看到两者之间的耗时情况,当cpu空闲时,程序运行的更快,当cpu繁忙时,程序运行的时间更久。

  总结分析影响程序执行性能的因素:

    1.CPU,CPU 是操作系统稳定运行的根本,CPU的速度与性能很大一部分决定了系统整体的性能,因此CPU数量越多、主频越高,服务器性能也就相对越好。

    2.I/O资源,在一个需要频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用的停滞。

    3.内存,内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费。

    4.网络带宽,Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞;而稳定、高速的带宽,可以保证应用程序在网络上畅通无阻地运行。

《Linux操作系统分析》课程总结报告

标签:压力测试工具   lazy   函数   系统文件   tin   左右   存在   read   文件操作   

原文地址:https://www.cnblogs.com/CJDiscipline/p/14760185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!