zoukankan      html  css  js  c++  java
  • 20169211《Linux内核原理与分析》第六周作业

    1.教材内容总结
    2.实验报告
    3.学习总结

    一、教材内容总结
    1、系统调用与应用编程接口API的区别
    操作系统为用户态进程与硬件设备进行交互提供了一组接口,就是系统调用。它主要有一下三个方面的作用:
    (1)把用户从底层的硬件编程中解放出来
    (2)极大的提高了系统的安全性
    (3)使用户程序具有可移植性
    而API和操作系统是不同的,API只是一个函数定义,而系统调用通过软中断向内核发出一个明确的请求。一般每个系统调用对应一个封装例程,然后libc库再用这些封装例程定义出给用户的API。不是每一个API都对应一个特定的系统调用。
    (1)API可能直接提供用户态的服务,例如一些数学函数等。
    (2)不同的API可能调用几个系统调用
    (3)不同的API可能调用了同一个系统调用
    2、内核态和用户态
    操作系统为了维持计算机的可持续的工作,要对这些可能影响到系统稳定的因素进行严格控制,不能让用户随意进行操作。这就是操作系统区分内核态和用户态的思想。对于一些可能影响系统稳定的函数,操作系统将它们放到内核态当中,在用户态中用户只能调用一些用户态的函数,而对于一些对内核函数,用户只能通过中断进入内核态中进行调用。下图简略的说明了用户态和内核态的程序调用关系。


    二、实验报告
    系统调用write。下面使用库函数和C代码嵌入汇编代码两种方式使用同一个系统调用。
    库函数调用系统调用:

    int write(int fd,const char *buf, off_t count)//fd为文件描述符,buf为写缓冲区指针,count为写入字节数
    
    #include<stdio.h>
    int main()
    {
    	char* c = "this is sys_write";
    	write(0,c,18);
    	return 0;
    }
    


    嵌入汇编代码调用系统调用

    #include<stdio.h>
    int main()
    {
    	char* c = "this is sys_write";
    	asm volatile (
    		"mov $0,%%ebx
    	"//对应fd
    		"mov %0,%%ecx
    	"//对应buf,也就是c
    		"mov $18,%%edx
    	"//对应count
    		"mov $0x4,%%eax
    	"//系统调用号为4
    		"int $0x80
    	"
    		:
    		:"r"(c)
    	);
    	return 0;
    }
    或
    int main()
    {
    	char* c="this is sys_write";
    	asm volatile(
    		"mov $0,%%ebx
    	"//对应fd
    		"mov $18,%%edx
    	"//对应count
    		"mov $0x4,%%eax
    	"//系统调用号为4
    		"int $0x80
    	"
    		:
    		:"c"(c)//直接将输入存入ecx
    }
    



    三、学习总结
    这一节主要通过实验,了解了系统如何进行系统调用的,加深了对内核态和用户态的理解。操作系统平常工作都在用户态当中,当用户态需要操作一些内核数据时,才会通过系统调用进入内核态,而这些系统调用都是操作系统本身实现了,用户无法修改。可以看出通过这种方式,操作系统实现了对关键数据的保护,从而维护了系统的高效稳定运行。

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/sharemi/p/6013732.html
Copyright © 2011-2022 走看看