使用库函数API获取当前时间

#include  <stdio.h>
#include <time.h>
int main()
{
time_tt tt;
struct tm *t;//输出时变成可读的
tt = time(NULL);//time系统调用
t=localtime(&tt);
printf("time:%d:%d:%d:%d:%d:%d\n",t->tm_year+1900,t->tm_mon,t->tm_mdata,t->tm_hour,t->tm_min,t->tm_sec);
return 0;
}

系统调用概述

  1. 系统调用的意义:操作系统为用户进程与硬件设备之间进行交互提供一组接口------系统调用
  • 把用户从底层的硬件编程中解放出来
  • 极大的提高了系统的安全性
  • 使用户程序具有可移植性
  1. 应用编程接口API和系统调用是不同的 只是一个函数定义 通过软中断向内核发出一个明确的指令
  2. Libc库定义的一些API引用了封装例程

系统调用的三层皮

当用户态进程调用一个系统调用时,cPU切换带内核态开始执行内核函数

系统调用号,系统调用参数,函数调用时

用户态 内核态和中断处理过程

  1. 区分用户态和内核态
  • 一般现代CPU都有集中不同的指令执行级别
  • 高执行级别下:该级别指令下,可以执行特权指令
  • linux 0级用户态 3级内核态
  • cs寄存器的最低的两位表明了代码的级别
  • cs时代码段选择寄存器,eip是偏移量寄存器
  • 0xc0000000以上的空间只有在内核状态下访问,都可以访问0x00000000-0xbffffffff的地址空间

中断处理时用户态进入内核态的主要方式。

系统调用是一种特殊的中断

寄存器上下文

从用户态切换到内核态是必须保存用户态的寄存器上下文 中断/int指令会在堆栈上保存一些寄存器的值 如:用户态的栈顶地址、当时的状态子、当时的cs:eip的值

保护现场 就是 进入中断程序 保存需要用到的寄存器的数据包

恢复现场 就是 退出中断程序 恢复保存

C语言代码中嵌入汇编代码

  • “asm” 表示后面的代码为内嵌汇编,“asm”是“asm”的别名。
  • “volatile” 表示编译器不要优化代码,后面的指令保留原样,“volatile”是它的别名。

    内嵌汇编语法如下:

    asm(

    汇编语句模板:

    输出部分:

    输入部分:

    破坏描述部分)

    一个简单的汇编模板:
  • 表示C语言里的“b=a;”的代码:
int a=10,b;
asm("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /*输出部分*/
:"r"(a) /*输入部分*/
:"%eax" /*毁坏部分*/
);

里边r表示使用任意寄存器,%0、%1表示使用两个寄存器,一般只能%0~%9共十个操作数,按输入输出部变量出现顺序进行映射。

寄存器用两个百分号,是因为使用了%0%1这些数字使百分号有了特殊意义,所以在操作数出现的寄存器必须用双百分表示。

毁坏部里边的%eax表示eax寄存器在汇编代码块执行过程中会被改写,在执行前要保护好,这是提交给编译器决定的。

2019-2020-1 20199312《Linux内核原理与分析》第五周作业的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  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. PHP 与操作判断奇偶

    /** * 判断奇偶数 * @param $n * @return int */ function isOdd($n){ // $a & $b And(按位与) 将把 $a 和 $b 中都为 ...

  2. go方法

    go中的方法(method),跟函数(function)不是一个概念,一定要区分,它的概念与python中的类方法类似. go中是没有类的概念的,所以,go要想实现类 多种属性集合的功能的话,必须要使 ...

  3. Cookies和Sessions

    Cookie和Session 为什么会有cookie和session? 由于http协议是无状态的 无法记住用户是谁,cookie主要是在浏览器上记录客户的状态,session主要是用来在服务端记录客 ...

  4. Tomcat中不能通过访问自己IP,但可以通过localhost/127.0.0.1访问

    一.问题如下:局域网内,自己机器部署了一个tomcat应用,在本机上可以通过如下方式访问引用.  http://localhost:8080/xxxx http://127.0.0.1:8080/xx ...

  5. PAT(B) 1071 小赌怡情(Java)

    题目链接:1071 小赌怡情 (15 point(s)) 题目描述 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大 ...

  6. Oracle部分

    做了很多年Oracle,转行到MySQL了,算是借鉴 Oracle日常维护管理指标 一. 基本硬件环境 1. 主机硬件环境 品牌 型号 数量 物理CPU核数及逻辑CPU数 内存大小 本地硬盘大小 光驱 ...

  7. [UOJ#404][CTSC2018]组合数问题(79分,提交答案题,模拟退火+匈牙利+DP)

    1.4.5.6.10都是op=1的点,除4外直接通过模拟退火调参可以全部通过. #include<cmath> #include<ctime> #include<cstd ...

  8. 利用RabbitMQ实现分布式事务

    实现要点:1.构建本地消息表及定时任务,确保消息可靠发送:2.RabbitMQ可靠消费:3.redis保证幂等 两个服务:订单服务和消息服务 订单服务消息可靠发送 使用springboot构建项目,相 ...

  9. iview的table组件中加入超链接组件,可编辑组件,选择组件,日期组件

    这篇文章主要介绍了iview的table组件中使用选择框,日期,可编辑表格,超链接等组件. 1.select选择组件 // tableColumn数组响应对象需要传入一个固定的option数组,如果该 ...

  10. AJAX with JSP and Servlet(代码)

    欢迎任何形式的转载,但请务必注明出处. 本章内容来自YouTube需翻墙(点击进入视频学习) 服务器配置等可以参看我其他文章.注释等后续再加 效果图 结构   <body> <fie ...