2010-4-20

1】posix :最小系统运行的API集合;

2】linux内核中把进程和线程都当作任务,在solaris版中与两种调度:1>用户级线程 2>内核级线程,而linux中只有第二种。

3】每个进程都有一个自己独立的映射关系(MMU)

    TLB:Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。

      当CPU执行机构收到应用程序发来的虚拟地址后,首先到TLB中查找相应的页表数据,如果TLB中正好存放着所需的页表,则称为TLB命中(TLB Hit),接下来CPU再依次看TLB中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存中取相应地址所存放的数据。既然说TLB是内存里存放的页表的缓存,那么它里边存放的数据实际上和内存页表区的数据是一致的,在内存的页表区里,每一条记录虚拟页面和物理页框对应关系的记录称之为一个页表条目(Entry),同样地,在TLB里边也缓存了同样大小的页表条目(Entry)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是我设计的程序,请您查看: ```c #include <stdio.h> #include <string.h> // 定义球员数据结构体类型 typedef struct { int no; // 编号 char season[20]; // 赛季 int age; // 年龄 float trb; // 篮板 float ast; // 助攻 float pts; // 得分 } PlayerData; // 初始化球员数据函数 void init(PlayerData *data) { data[0] = (PlayerData) {1, "1996-97", 18, 1.9, 1.3, 7.6}; data[1] = (PlayerData) {2, "1997-98", 19, 3.1, 2.5, 15.4}; data[2] = (PlayerData) {3, "1998-99", 20, 5.3, 3.8, 19.9}; data[3] = (PlayerData) {4, "1999-00", 21, 6.3, 4.9, 22.5}; data[4] = (PlayerData) {5, "2000-01", 22, 5.9, 5, 28.5}; data[5] = (PlayerData) {6, "2001-02", 23, 5.5, 5.5, 25.2}; data[6] = (PlayerData) {7, "2002-03", 24, 6.9, 5.9, 30}; data[7] = (PlayerData) {8, "2003-04", 25, 5.5, 5.1, 24}; data[8] = (PlayerData) {9, "2004-05", 26, 5.9, 6, 27.6}; data[9] = (PlayerData) {10, "2005-06", 27, 5.3, 4.5, 35.4}; data[10] = (PlayerData) {11, "2006-07", 28, 5.7, 5.4, 31.6}; data[11] = (PlayerData) {12, "2007-08", 29, 6.3, 5.4, 28.3}; data[12] = (PlayerData) {13, "2008-09", 30, 5.2, 4.9, 26.8}; data[13] = (PlayerData) {14, "2009-10", 31, 5.4, 5, 27}; data[14] = (PlayerData) {15, "2010-11", 32, 5.1, 4.7, 25.3}; data[15] = (PlayerData) {16, "2011-12", 33, 5.4, 4.6, 27.9}; data[16] = (PlayerData) {17, "2012-13", 34, 5.6, 6, 27.3}; data[17] = (PlayerData) {18, "2013-14", 35, 4.3, 6.3, 13.8}; data[18] = (PlayerData) {19, "2014-15", 36, 5.7, 5.6, 22.3}; data[19] = (PlayerData) {20, "2015-16", 37, 3.7, 2.8, 17.6}; } // 找到最高得分和次高得分 void findMaxAndSecondMax(PlayerData *data, int start, int end, PlayerData *max, PlayerData *secondMax) { int i; *max = data[start]; *secondMax = data[start + 1]; for (i = start + 2; i <= end; i++) { if (data[i].pts > max->pts) { *secondMax = *max; *max = data[i]; } else if (data[i].pts > secondMax->pts) { *secondMax = data[i]; } } } int main() { PlayerData data[20]; PlayerData max, secondMax; int a, b; init(data); printf("请输入两个不同的赛季序号a和b(均已满足 1<=a<=20,1<=b<=20,a和b间隔不少于2):\n"); scanf("%d%d", &a, &b); findMaxAndSecondMax(data, a - 1, b - 1, &max, &secondMax); printf("%s %d %.1f %.1f %.1f\n", max.season, max.age, max.trb, max.ast, max.pts); printf("%s %d %.1f %.1f %.1f\n", secondMax.season, secondMax.age, secondMax.trb, secondMax.ast, secondMax.pts); return 0; } ``` 程序说明: 1. 我们定义了一个球员数据的结构体类型,包括编号、赛季、年龄、篮板、助攻和得分。 2. 我们编写了一个初始化球员数据的函数,用于初始化20年的数据。 3. 我们编写了一个查找最高得分和次高得分的函数,该函数接受开始和结束位置,以及两个指针参数,用于返回最高得分和次高得分的球员数据。 4. 在主函数中,我们先初始化球员数据,然后输入两个赛季的序号a和b,调用函数查找范围内的最高得分和次高得分,并输出相关信息。 注意:程序中的年龄、篮板、助攻和得分数据均为浮点数,需要使用%f进行格式化输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值