亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? layout_g2.c

?? disksim是一個非常優秀的磁盤仿真工具
?? C
字號:
/* diskmodel (version 1.1) * Authors: John Bucy, Greg Ganger * Contributors: John Griffin, Jiri Schindler, Steve Schlosser * * Copyright (c) of Carnegie Mellon University, 2003-2005 * * This software is being provided by the copyright holders under the * following license. By obtaining, using and/or copying this * software, you agree that you have read, understood, and will comply * with the following terms and conditions: * * Permission to reproduce, use, and prepare derivative works of this * software is granted provided the copyright and "No Warranty" * statements are included with all reproductions and derivative works * and associated documentation. This software may also be * redistributed without charge provided that the copyright and "No * Warranty" statements are included in all redistributions. * * NO WARRANTY. THIS SOFTWARE IS FURNISHED ON AN "AS IS" BASIS. * CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER * EXPRESSED OR IMPLIED AS TO THE MATTER INCLUDING, BUT NOT LIMITED * TO: WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY * OF RESULTS OR RESULTS OBTAINED FROM USE OF THIS SOFTWARE. CARNEGIE * MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH * RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT * INFRINGEMENT.  COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE * OF THIS SOFTWARE OR DOCUMENTATION.   */#include "layout_g2.h"#include <stdlib.h>#define min(x,y) (x) < (y) ? (x) : (y)static struct dm_layout_g2_zone *find_zone_lbn(struct dm_disk_if *d,	      int lbn){  int c;  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  for(c = 0; c < l->zones_len; c++) {    if((l->zones[c].lbnlow <= lbn)        && (lbn <= l->zones[c].lbnhigh))       {	return &l->zones[c];      }  }  ddbg_assert(0);  return 0;}static struct dm_layout_g2_zone *find_zone_pbn(struct dm_disk_if *d,	      struct dm_pbn *p){  int c;  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  for(c = 0; c < l->zones_len; c++) {    if((l->zones[c].cyllow <= p->cyl)        && (p->cyl <= l->zones[c].cylhigh))       {	return &l->zones[c];      }  }  ddbg_assert(0);  return 0;}// return 1 if they overlap, ..static intg2_nodecmp(const void *p1, const void *p2) {  struct dm_layout_g2_node *n1 = (struct dm_layout_g2_node *)p1;  struct dm_layout_g2_node *n2 = (struct dm_layout_g2_node *)p2;  if(n1->lbn >= (n2->lbn + n2->len)) {    return 1;  }  else if(n2->lbn >= (n1->lbn + n1->len)) {    return -1;  }  else return 0;}static dm_ptol_result_tltop(struct dm_disk_if *d,      int lbn,      dm_layout_maptype mt,     struct dm_pbn *result,     int *remapsector){  struct dm_layout_g2_node keynode, *rn;  struct dm_layout_g2_zone *z = find_zone_lbn(d,lbn);  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  memset(&keynode, 0, sizeof(keynode));  keynode.lbn = lbn;  keynode.len = 1;  rn = bsearch(&keynode, 	       l->ltop_map, 	       l->ltop_map_len, 	       sizeof(struct dm_layout_g2_node),	       g2_nodecmp);  if(!rn) {    return DM_NX;  }  else {    *result = rn->loc;    result->sector += (lbn - rn->lbn);    return DM_OK;  }}static dm_ptol_result_tltop_0t(struct dm_disk_if *d, 	int lbn, 	dm_layout_maptype mt,	struct dm_pbn *result,	int *remapsector){  ddbg_assert(0);  return 0;}  static dm_ptol_result_tptol(struct dm_disk_if *d,      struct dm_pbn *p,     int *remapsector){  int i;  struct dm_layout_g2_node *curr;  struct dm_layout_g2_surf *track;  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  ddbg_assert(p->cyl < d->dm_cyls);  ddbg_assert(p->head < d->dm_surfaces);  curr = &l->ptol_map[p->cyl].surfaces[p->head].extents[0];  for(i = 0;       i < l->ptol_map[p->cyl].surfaces[p->head].extents_len;       i++, curr++)   {    if((curr->loc.cyl == p->cyl)       && (curr->loc.head == p->head)       && (p->sector >= curr->loc.sector)       && (p->sector < (curr->loc.sector + curr->len)))          {      return curr->lbn + (p->sector - curr->loc.sector);    }  }   return DM_NX;}static dm_ptol_result_tptol_0t(struct dm_disk_if *d, 	struct dm_pbn *p,	int *remapsector){  ddbg_assert(0);  return 0;}static int trkcmp(const void *ptr1, const void *ptr2){  const struct dm_pbn *p1 = ptr1;  const struct dm_pbn *p2 = ptr2;  if(p1->cyl < p2->cyl) return -1;  else if(p2->cyl < p1->cyl) return 1;  if(p1->head < p2->head) return -1;  else if(p2->head < p1->head) return 1;  return 0;}static dm_ptol_result_tg2_defect_count(struct dm_disk_if *d,		struct dm_pbn *track,		int *result){  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  struct dm_pbn *p, *p1, *p2;  if(!l->defects_len) {    *result = 0;    goto out;  }  p = bsearch(track,	      l->defects, 	      l->defects_len, 	      sizeof(struct dm_pbn), 	      trkcmp);  if(!p) {    *result = 0;  }  else {    p1 = p2 = p;        while(!trkcmp(p1, p)) p1--;      while(!trkcmp(p2, p)) p2++;          *result = p2 - p1 - 1;  } out:  return DM_OK;}static intst_lbn(struct dm_disk_if *d,       int lbn){  struct dm_layout_g2_zone *z = find_zone_lbn(d, lbn);  return z->st;}static intst_pbn(struct dm_disk_if *d,       struct dm_pbn *p){  struct dm_pbn p2 = *p;  struct dm_layout_g2_zone *z;  // return st for the nearest (lower) zone if this cyl is unmapped  while(!(z = find_zone_pbn(d, &p2)) && p2.cyl >= 0) { p2.cyl--; }  ddbg_assert(z);  return z->st;}static voidtrack_boundaries(struct dm_disk_if *d,		 struct dm_pbn *p,		 int *l1,		 int *l2,		 int *remapsector){  struct dm_pbn p1, p2;  struct dm_layout_g2_zone *z = find_zone_pbn(d, p);  p1 = *p;  p2 = *p;  p1.sector = 0;  p2.sector = z->st;    if(l1) {    do {       *l1 = d->layout->dm_translate_ptol(d, &p1, remapsector);      p1.sector++;    } while((*l1 == DM_NX) && (p1.sector < z->st));  }  if(l2) {    do {      p2.sector--;      *l2 = d->layout->dm_translate_ptol(d, &p2, remapsector);    } while((*l2 == DM_NX) && p2.sector);  }}static dm_angle_tsector_width(struct dm_disk_if *d,	     struct dm_pbn *track,	     int num){  struct dm_layout_g2_zone *z = find_zone_pbn(d, track);  return z->sector_width * num;}static dm_angle_tpbn_skew_new(struct dm_disk_if *d,	 struct dm_pbn *p){  int i;  int lasthead, lastcyl;  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  struct dm_layout_g2_zone *z = find_zone_pbn(d, p);  int fltop_ext = l->ptol_map[p->cyl].first_ltop_extent;  dm_angle_t result = l->ptol_map[p->cyl].skew;  lastcyl = l->ltop_map[fltop_ext].loc.cyl;  lasthead = l->ltop_map[fltop_ext].loc.head;  for(i = fltop_ext; i < l->ltop_map_len; i++) {    if(l->ltop_map[i].loc.cyl != lastcyl) {       result += z->csskew;      lastcyl = l->ltop_map[i].loc.cyl;    }    if(l->ltop_map[i].loc.head != lasthead) {      result += z->hsskew;      lasthead = l->ltop_map[i].loc.head;    }    if((l->ltop_map[i].loc.cyl == p->cyl)       && (l->ltop_map[i].loc.head == p->head)) goto done;  }  ddbg_assert(0); done:  result += p->sector * z->sector_width;  return result;}static dm_angle_tpbn_skew(struct dm_disk_if *d,	 struct dm_pbn *p){  int i;  int lastcyl, lasthead;  dm_angle_t result = 0;  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  struct dm_layout_g2_zone *z = find_zone_pbn(d, p);  // count headswitch/cylswitch  // find start of zone in ltop map  // slooooow  // precompute -- table of first index per zone  for(i = 0; i < l->ltop_map_len; i++) {    if(l->ltop_map[i].loc.cyl == z->cyllow) break;  }  if((l->ltop_map[i].loc.cyl == p->cyl)     && (l->ltop_map[i].loc.head == p->head)) goto done;  lastcyl = l->ltop_map[i].loc.cyl;  lasthead = l->ltop_map[i].loc.head;    // walk forward until we get to p  // precompute: skew per cylinder  for( ; i < l->ltop_map_len; i++) {    if(l->ltop_map[i].loc.cyl != lastcyl) result += z->csskew;    if(l->ltop_map[i].loc.head != lasthead) result += z->hsskew;    if((l->ltop_map[i].loc.cyl == p->cyl)       && (l->ltop_map[i].loc.head == p->head)) goto done;  }  ddbg_assert(0); done:  result += p->sector * z->sector_width;  return result;}static voidptoa(struct dm_disk_if *d,     struct dm_pbn *p,     dm_angle_t *start,     dm_angle_t *width){  struct dm_layout_g2_zone *z = find_zone_pbn(d, p);  if(start)    *start = z->sector_width * p->sector;  if(width)    *start = z->sector_width;}static dm_ptol_result_tatop(struct dm_disk_if *d,     struct dm_mech_state *a,     struct dm_pbn *result){  struct dm_pbn pbn;  struct dm_layout_g2_zone *z;  result->head = a->head;  result->cyl = a->cyl;  pbn.head = a->head;  pbn.cyl = a->cyl;  z = find_zone_pbn(d, &pbn);  result->sector = (a->theta / z->sector_width) % z->st;  return DM_OK;}static dm_ptol_result_tg2_seek_distance(struct dm_disk_if *d,		 int start_lbn,		 int end_lbn){  struct dm_pbn p1, p2;  int rv;  rv = d->layout->dm_translate_ltop(d, start_lbn, MAP_NONE, &p1, 0);  if(rv != DM_OK) {    return rv;  }  rv = d->layout->dm_translate_ltop(d, end_lbn, MAP_NONE, &p2, 0);  if(rv != DM_OK) {    return rv;  }    return abs(p2.cyl - p1.cyl);}  // returns the number of zones for the layoutstatic int g2_get_numzones(struct dm_disk_if *d){  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  return l->zones_len;}// Fetch the info about the nth zone and store it in the result// parameter z.  Returns 0 on success, -1 on error (bad n)// n should be within 0 and (dm_get_numzones() - 1)static int g2_get_zone(struct dm_disk_if *d, int n, struct dm_layout_zone *result){  struct dm_layout_g2 *l = (struct dm_layout_g2 *)d->layout;  struct dm_layout_g2_zone *z;  if(result == 0) { return -1; }  if(n < 0 || n >= l->zones_len) { return -1; }    z = &l->zones[n];  result->spt = z->st;  result->lbn_low = z->lbnlow;  result->lbn_high = z->lbnhigh;  result->cyl_low = z->cyllow;  result->cyl_high = z->cylhigh;    return 0;}struct dm_layout_if layout_g2 = {  ltop,  ltop_0t,  ptol,  ptol_0t,  st_lbn,  st_pbn,  track_boundaries,  g2_seek_distance, //  seekdist,  pbn_skew_new,  0, // get_zerol  ptoa, // ptoa  atop, // atop  sector_width,  0, // lbn offset  0, // marshall -- probably not implemented for g2  0, // unmarshall  g2_get_numzones,  g2_get_zone,  g2_defect_count};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91日韩在线专区| 波多野结衣中文字幕一区二区三区| 日韩一区二区在线观看视频| 成人永久看片免费视频天堂| 午夜精品福利在线| 成人欧美一区二区三区小说| 欧美一区二区三区在| 成人99免费视频| 韩国三级电影一区二区| 亚洲乱码国产乱码精品精可以看| 欧美一二三区在线观看| 欧美日韩免费电影| 欧美三级视频在线观看| 97se亚洲国产综合自在线观| 国产精品性做久久久久久| 性做久久久久久免费观看| 亚洲欧美日韩一区| 中文字幕一区二区三区四区| 欧美激情一区二区三区蜜桃视频| 91精品国产综合久久香蕉麻豆| 欧美午夜精品一区二区蜜桃 | 一区二区三区四区五区视频在线观看| 亚洲精品一区二区三区影院| 欧美精品777| 欧美xxxxxxxxx| 久久综合999| 国产精品免费看片| 亚洲天堂中文字幕| 中文字幕亚洲欧美在线不卡| 自拍av一区二区三区| 最新国产精品久久精品| 一区二区免费看| 天天影视色香欲综合网老头| 美女视频黄免费的久久| 国产精品资源在线| 91欧美一区二区| 欧洲日韩一区二区三区| 日韩一级成人av| 国产精品免费aⅴ片在线观看| 最新国产の精品合集bt伙计| 夜夜嗨av一区二区三区四季av| 亚瑟在线精品视频| 国产成人aaaa| 制服.丝袜.亚洲.另类.中文| 中文字幕在线一区| 亚洲精品国产精华液| 美女视频免费一区| 色天天综合色天天久久| 欧美不卡视频一区| 亚洲精品美腿丝袜| 国产精品一级黄| 欧美丰满一区二区免费视频| 国产精品拍天天在线| 欧美aⅴ一区二区三区视频| 国产a精品视频| 欧美一卡二卡在线观看| 亚洲一区二区三区中文字幕| 国产一区二区在线看| 欧美天天综合网| 亚洲欧洲性图库| 国产精品一二三| 日韩欧美www| 九九久久精品视频| 91精品国产综合久久福利软件| 亚洲黄色小说网站| www.亚洲人| 亚洲欧美自拍偷拍| av男人天堂一区| 亚洲欧美日韩在线| 色一情一伦一子一伦一区| 久久婷婷国产综合国色天香| 精品一区在线看| 日韩你懂的在线观看| 久久激情五月激情| 欧美xxxxx牲另类人与| 久久国产精品免费| 日韩区在线观看| 久久97超碰色| 欧美日韩精品是欧美日韩精品| 亚洲欧美中日韩| 欧洲精品一区二区三区在线观看| 亚洲免费色视频| 欧美日韩国产一二三| 日韩国产精品久久久| 欧美mv日韩mv亚洲| 成人涩涩免费视频| 亚洲精品少妇30p| 91麻豆精品国产自产在线观看一区 | 国产精品 欧美精品| 中文字幕精品一区| 日本韩国一区二区三区视频| 婷婷综合在线观看| 久久久久97国产精华液好用吗| 成人丝袜18视频在线观看| 亚洲一区二区三区在线播放| 5566中文字幕一区二区电影 | 九九国产精品视频| 最新高清无码专区| 日韩小视频在线观看专区| av一二三不卡影片| 日本三级亚洲精品| 亚洲欧美日韩国产中文在线| 91精品国产色综合久久| aaa欧美大片| 精品一区二区久久| 亚洲18女电影在线观看| 国产精品沙发午睡系列990531| 欧美日韩国产高清一区二区三区| 国产精品一区二区x88av| 日日欢夜夜爽一区| 一区二区三区四区乱视频| 久久婷婷国产综合国色天香| 欧美群妇大交群的观看方式| 成人av午夜电影| 国产盗摄女厕一区二区三区| 青青草精品视频| 日本中文字幕一区二区有限公司| 亚洲日本电影在线| 成人免费在线播放视频| 国产日韩欧美高清在线| 欧美精品一区二区三区蜜桃| 欧美日本在线播放| 欧美日韩中文字幕一区| 在线免费视频一区二区| 91成人看片片| 欧美日韩视频一区二区| 欧美日韩在线三级| 69p69国产精品| 欧美嫩在线观看| 精品理论电影在线| 久久理论电影网| 中文字幕一区二区三区四区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产精品免费久久久久| 亚洲女人小视频在线观看| 亚洲高清不卡在线观看| 日韩国产欧美在线观看| 毛片不卡一区二区| 欧美日韩成人综合天天影院 | 日韩有码一区二区三区| 亚洲欧洲精品天堂一级 | 欧美日韩国产综合视频在线观看| www成人在线观看| 精品国免费一区二区三区| www久久久久| 亚洲品质自拍视频网站| 午夜精品在线看| 国产一区二区女| 日本乱人伦aⅴ精品| 日韩免费观看高清完整版| 亚洲国产精品成人综合| 亚洲国产视频在线| 国产一区二区三区在线观看免费| 成人av中文字幕| 日韩午夜在线影院| 亚洲人成在线播放网站岛国| 日韩av高清在线观看| av在线播放成人| 精品国产乱码久久久久久图片| 亚洲猫色日本管| 国产剧情一区在线| 欧美一区二区三区在线| 中文字幕字幕中文在线中不卡视频| 七七婷婷婷婷精品国产| 91麻豆国产香蕉久久精品| 精品国产123| 日韩成人一区二区| 在线亚洲+欧美+日本专区| 日本一区二区三区免费乱视频| 日本视频一区二区三区| 色综合天天综合色综合av| 日本一区免费视频| 国产一区二区精品在线观看| 欧美日本韩国一区二区三区视频| 精品少妇一区二区三区免费观看| 久久久久久综合| 国产美女精品人人做人人爽| 欧美丰满美乳xxx高潮www| 午夜一区二区三区视频| 欧美日韩卡一卡二| 麻豆免费看一区二区三区| 在线播放视频一区| 另类中文字幕网| 久久久久国产精品人| 成人精品视频一区| 中文字幕一区视频| 91丝袜国产在线播放| 亚洲一卡二卡三卡四卡无卡久久 | 精彩视频一区二区| 久久久久久免费| 91无套直看片红桃| 亚洲高清在线视频| 久久婷婷一区二区三区| 99re热这里只有精品免费视频| 亚洲一区在线播放| 久久欧美中文字幕| 99re热视频这里只精品| 麻豆免费精品视频| 亚洲乱码中文字幕综合| 欧美猛男gaygay网站|