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\n\t"//对应fd
"mov %0,%%ecx\n\t"//对应buf,也就是c
"mov $18,%%edx\n\t"//对应count
"mov $0x4,%%eax\n\t"//系统调用号为4
"int $0x80\n\t"
:
:"r"(c)
);
return 0;
}

int main()
{
char* c="this is sys_write";
asm volatile(
"mov $0,%%ebx\n\t"//对应fd
"mov $18,%%edx\n\t"//对应count
"mov $0x4,%%eax\n\t"//系统调用号为4
"int $0x80\n\t"
:
:"c"(c)//直接将输入存入ecx
}





三、学习总结

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

20169211《Linux内核原理与分析》第六周作业的更多相关文章

  1. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  2. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  3. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  4. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  5. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  6. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  7. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  10. 2018-2019-1 20189221《Linux内核原理与分析》第二周作业

    读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...

随机推荐

  1. Java获取精确到毫秒的时间戳

    import java.util.Date; public class Timestamp { /** 获取精确到毫秒的时间戳 * @param date * @return **/ public s ...

  2. [转载]浅析为什么char类型的范围是 —128~+127

    http://blog.csdn.net/daiyutage/article/details/8575248 在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写, ...

  3. 深入浅出JavaScript之跨域总结

    什么是跨域 1.document.domain+iframe的设置 2.动态创建script 3.利用iframe和location.hash 4.window.name实现的跨域数据传输 5.使用H ...

  4. 20155210潘滢昊 2016-2017-2 《Java程序设计》第5周学习总结

    20155210 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 try with resources 关闭多个资源时用分号分隔 java.lang.Auto ...

  5. CodeForces 714A

    Description Today an outstanding event is going to happen in the forest — hedgehog Filya will come t ...

  6. 阿里云mysql数据库设置让公网访问客户端访问

    第一步 首先使用root登入你的mysql ./mysql -u root -p 你的密码 第二步 备注:也可以添加一个用户名为yuancheng,密码为123456,权限为%(表示任意ip都能连接) ...

  7. 【译】第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  8. GRUB (简体中文)

    原文链接:https://wiki.archlinux.org/index.php/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 前言 引导程序是计算机启动时 ...

  9. FPGA设计方法检查表

    -----------------------摘自<FPGA软件测试与评价技术> 中国电子信息产业发展研究院 | 编著------------------------------- 文本格 ...

  10. accept系统调用

    /* * For accept, we attempt to create a new socket, set up the link * with the client, wake up the c ...