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

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

?? cpu.c

?? 思科路由器仿真器,用來仿7200系列得,可以在電腦上模擬路由器
?? C
字號:
/* * Cisco router simulation platform. * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr) * * Management of CPU groups (for MP systems). */#define _GNU_SOURCE#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <stdarg.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <fcntl.h>#include <pthread.h>#include "cpu.h"#include "memory.h"#include "device.h"#include "mips64.h"#include "mips64_cp0.h"#include "mips64_exec.h"#include "mips64_jit.h"#include "ppc32.h"#include "ppc32_exec.h"#include "ppc32_jit.h"#include "dynamips.h"#include "vm.h"/* Find a CPU in a group given its ID */cpu_gen_t *cpu_group_find_id(cpu_group_t *group,u_int id){   cpu_gen_t *cpu;   if (!group)      return NULL;   for(cpu=group->cpu_list;cpu;cpu=cpu->next)      if (cpu->id == id)         return cpu;   return NULL;}/* Find the highest CPU ID in a CPU group */int cpu_group_find_highest_id(cpu_group_t *group,u_int *highest_id){   cpu_gen_t *cpu;   u_int max_id = 0;   if (!group || group->cpu_list)      return(-1);   for(cpu=group->cpu_list;cpu;cpu=cpu->next)      if (cpu->id >= max_id)         max_id = cpu->id;   *highest_id = max_id;   return(0);}/* Add a CPU in a CPU group */int cpu_group_add(cpu_group_t *group,cpu_gen_t *cpu){   if (!group)      return(-1);   /* check that we don't already have a CPU with this id */   if (cpu_group_find_id(group,cpu->id) != NULL) {      fprintf(stderr,"cpu_group_add: CPU%u already present in group.\n",              cpu->id);      return(-1);   }      cpu->next = group->cpu_list;   group->cpu_list = cpu;   return(0);}/* Create a new CPU group */cpu_group_t *cpu_group_create(char *name){   cpu_group_t *group;   if (!(group = malloc(sizeof(*group))))      return NULL;   group->name = name;   group->cpu_list = NULL;   return group;}/* Delete a CPU group */void cpu_group_delete(cpu_group_t *group){     cpu_gen_t *cpu,*next;   if (group != NULL) {      for(cpu=group->cpu_list;cpu;cpu=next) {         next = cpu->next;         cpu_delete(cpu);      }      free(group);   }}/* Rebuild the MTS subsystem for a CPU group */int cpu_group_rebuild_mts(cpu_group_t *group){   cpu_gen_t *cpu;   for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu->mts_rebuild(cpu);   return(0);}/* Log a message for a CPU */void cpu_log(cpu_gen_t *cpu,char *module,char *format,...){   char buffer[256];   va_list ap;   va_start(ap,format);   snprintf(buffer,sizeof(buffer),"CPU%u: %s",cpu->id,module);   vm_flog(cpu->vm,buffer,format,ap);   va_end(ap);}/* Create a new CPU */cpu_gen_t *cpu_create(vm_instance_t *vm,u_int type,u_int id){   void *(*cpu_run_fn)(void *);   cpu_gen_t *cpu;   if (!(cpu = malloc(sizeof(*cpu))))      return NULL;   memset(cpu,0,sizeof(*cpu));   cpu->vm = vm;   cpu->id = id;   cpu->type = type;   cpu->state = CPU_STATE_SUSPENDED;   switch(cpu->type) {      case CPU_TYPE_MIPS64:         cpu->jit_op_array_size = MIPS_INSN_PER_PAGE;         CPU_MIPS64(cpu)->vm = vm;         CPU_MIPS64(cpu)->gen = cpu;         mips64_init(CPU_MIPS64(cpu));         cpu_run_fn = (void *)mips64_jit_run_cpu;         if (!cpu->vm->jit_use)            cpu_run_fn = (void *)mips64_exec_run_cpu;         else            mips64_jit_init(CPU_MIPS64(cpu));         break;      case CPU_TYPE_PPC32:         cpu->jit_op_array_size = PPC32_INSN_PER_PAGE;         CPU_PPC32(cpu)->vm = vm;         CPU_PPC32(cpu)->gen = cpu;         ppc32_init(CPU_PPC32(cpu));         cpu_run_fn = (void *)ppc32_jit_run_cpu;         if (!cpu->vm->jit_use)            cpu_run_fn = (void *)ppc32_exec_run_cpu;         else            ppc32_jit_init(CPU_PPC32(cpu));         break;      default:         fprintf(stderr,"CPU type %u is not supported yet\n",cpu->type);         abort();         break;   }   /* create the CPU thread execution */   if (pthread_create(&cpu->cpu_thread,NULL,cpu_run_fn,cpu) != 0) {      fprintf(stderr,"cpu_create: unable to create thread for CPU%u\n",id);      free(cpu);      return NULL;   }   return cpu;}/* Delete a CPU */void cpu_delete(cpu_gen_t *cpu){   if (cpu) {      /* Stop activity of this CPU */      cpu_stop(cpu);      pthread_join(cpu->cpu_thread,NULL);      /* Free resources */      switch(cpu->type) {         case CPU_TYPE_MIPS64:            mips64_delete(CPU_MIPS64(cpu));            break;         case CPU_TYPE_PPC32:            ppc32_delete(CPU_PPC32(cpu));            break;      }      free(cpu);   }}/* Start a CPU */void cpu_start(cpu_gen_t *cpu){   if (cpu) {      cpu_log(cpu,"CPU_STATE","Starting CPU (old state=%u)...\n",cpu->state);      cpu->state = CPU_STATE_RUNNING;   }}/* Stop a CPU */void cpu_stop(cpu_gen_t *cpu){   if (cpu) {      cpu_log(cpu,"CPU_STATE","Halting CPU (old state=%u)...\n",cpu->state);      cpu->state = CPU_STATE_HALTED;   }}/* Start all CPUs of a CPU group */void cpu_group_start_all_cpu(cpu_group_t *group){   cpu_gen_t *cpu;      for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu_start(cpu);}/* Stop all CPUs of a CPU group */void cpu_group_stop_all_cpu(cpu_group_t *group){   cpu_gen_t *cpu;      for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu_stop(cpu);}/* Set a state of all CPUs of a CPU group */void cpu_group_set_state(cpu_group_t *group,u_int state){   cpu_gen_t *cpu;      for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu->state = state;}/* Returns TRUE if all CPUs in a CPU group are inactive */static int cpu_group_check_activity(cpu_group_t *group){   cpu_gen_t *cpu;   for(cpu=group->cpu_list;cpu;cpu=cpu->next) {      if (!cpu->cpu_thread_running)         continue;      if ((cpu->state == CPU_STATE_RUNNING) || !cpu->seq_state)         return(FALSE);   }   return(TRUE);}/* Synchronize on CPUs (all CPUs must be inactive) */int cpu_group_sync_state(cpu_group_t *group){      cpu_gen_t *cpu;   m_tmcnt_t t1,t2;   /* Check that CPU activity is really suspended */   t1 = m_gettime();   for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu->seq_state = 0;   while(!cpu_group_check_activity(group)) {      t2 = m_gettime();      if (t2 > (t1 + 10000))         return(-1);      usleep(50000);   }   return(0);}/* Save state of all CPUs */int cpu_group_save_state(cpu_group_t *group){   cpu_gen_t *cpu;      for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu->prev_state = cpu->state;      return(TRUE);}/* Restore state of all CPUs */int cpu_group_restore_state(cpu_group_t *group){   cpu_gen_t *cpu;      for(cpu=group->cpu_list;cpu;cpu=cpu->next)      cpu->state = cpu->prev_state;   return(TRUE);}/* Virtual idle loop */void cpu_idle_loop(cpu_gen_t *cpu){   struct timespec t_spc;   m_tmcnt_t expire;   expire = m_gettime_usec() + cpu->idle_sleep_time;   pthread_mutex_lock(&cpu->idle_mutex);   t_spc.tv_sec = expire / 1000000;   t_spc.tv_nsec = (expire % 1000000) * 1000;   pthread_cond_timedwait(&cpu->idle_cond,&cpu->idle_mutex,&t_spc);   pthread_mutex_unlock(&cpu->idle_mutex);}/* Break idle wait state */void cpu_idle_break_wait(cpu_gen_t *cpu){   pthread_cond_signal(&cpu->idle_cond);   cpu->idle_count = 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久嫩草精品久久久精品一| 色呦呦国产精品| 欧美成人r级一区二区三区| 五月激情综合婷婷| 日韩一区二区影院| 奇米影视一区二区三区小说| 精品国产免费人成电影在线观看四季| 蜜臀av性久久久久蜜臀av麻豆| 欧美一区二区福利在线| 免费在线观看成人| 国产视频一区二区在线| 成人自拍视频在线| 亚洲综合色自拍一区| 欧美一区二区三区白人| 欧美日韩电影一区| 肉肉av福利一精品导航| 欧美大片顶级少妇| 成人精品视频一区二区三区| 亚洲另类在线一区| 日韩一级高清毛片| 国产成人av自拍| 一区二区不卡在线播放 | kk眼镜猥琐国模调教系列一区二区| 亚洲欧美在线aaa| 欧美日韩国产片| 国产成人免费av在线| 一区二区三区国产精品| 日韩欧美亚洲国产另类| 波多野结衣在线一区| 婷婷中文字幕一区三区| 欧美激情中文字幕| 欧美日韩一区二区三区四区 | 久久久久久久综合日本| 日本韩国欧美一区| 久久成人羞羞网站| 一区二区三区中文字幕| 久久品道一品道久久精品| 91成人网在线| 国产一区二区中文字幕| 亚洲国产精品久久艾草纯爱 | 大桥未久av一区二区三区中文| 夜夜精品浪潮av一区二区三区| 日韩免费福利电影在线观看| 色综合久久六月婷婷中文字幕| 加勒比av一区二区| 五月综合激情网| 亚洲人成7777| 亚洲国产精品精华液2区45| 欧美另类z0zxhd电影| 99国产精品久| 高清不卡在线观看av| 蜜桃视频在线一区| 欧美mv日韩mv| 91.xcao| 性做久久久久久免费观看欧美| 欧美精品色一区二区三区| 97精品电影院| 国产成人精品影院| 美女网站视频久久| 亚洲成人福利片| 一区二区高清免费观看影视大全| 国产日韩一级二级三级| 欧美刺激午夜性久久久久久久| 欧美亚洲尤物久久| 在线精品视频小说1| 99re成人在线| 成人永久aaa| 国产精品99精品久久免费| 狠狠狠色丁香婷婷综合激情| 日韩不卡一区二区三区| 日本在线不卡一区| 午夜欧美视频在线观看| 亚洲网友自拍偷拍| 亚洲国产裸拍裸体视频在线观看乱了 | 色综合视频一区二区三区高清| 成人av在线电影| 成人精品视频.| 国产成人精品在线看| 国产精品123| 成人免费的视频| 成人h版在线观看| 成人免费视频免费观看| 成人黄页在线观看| 成人av在线播放网址| www.日韩在线| 色哟哟国产精品| 欧美日韩国产免费| 日韩一级免费一区| 久久综合久久久久88| 久久精品国产秦先生| 日韩电影在线一区二区| 久久精品久久99精品久久| 国内精品视频666| 成人app网站| 在线免费精品视频| 欧美一区二区视频在线观看| 欧美成人a视频| 中文字幕av资源一区| 亚洲欧美日韩国产另类专区 | 在线不卡一区二区| 精品国产凹凸成av人导航| 欧美精品一区二区三区在线播放 | 亚洲色大成网站www久久九九| 亚洲欧洲无码一区二区三区| 一区二区三区国产精华| 青青青爽久久午夜综合久久午夜| 麻豆freexxxx性91精品| 国产精品18久久久久久久网站| 97久久精品人人做人人爽| 在线一区二区三区四区五区| 777久久久精品| 中文一区二区在线观看| 亚洲午夜久久久久| 国产麻豆一精品一av一免费| 菠萝蜜视频在线观看一区| 欧美日韩一区二区三区四区 | 国产人久久人人人人爽| 国产成人高清在线| 91麻豆国产自产在线观看| 51精品国自产在线| 国产精品女主播在线观看| 亚洲午夜精品网| 粉嫩一区二区三区在线看| 精品婷婷伊人一区三区三| 久久天堂av综合合色蜜桃网| 亚洲另类春色校园小说| 精品系列免费在线观看| 91久久精品国产91性色tv| 精品国产区一区| 午夜婷婷国产麻豆精品| 成人v精品蜜桃久久一区| 欧美一区二区黄色| 亚洲乱码精品一二三四区日韩在线| 日韩成人精品视频| 日韩一区二区精品| kk眼镜猥琐国模调教系列一区二区 | 国产福利视频一区二区三区| 日韩在线一区二区| www.欧美.com| 久久综合五月天婷婷伊人| 亚洲国产视频a| 99视频有精品| 久久婷婷综合激情| 首页国产欧美日韩丝袜| 色综合天天性综合| 久久久久国产精品麻豆ai换脸| 午夜电影网一区| 欧美性生活大片视频| 国产精品国产三级国产普通话三级 | eeuss鲁片一区二区三区在线观看| 欧美一区二区视频在线观看| 亚洲免费在线看| 91亚洲精品乱码久久久久久蜜桃| 精品播放一区二区| 美国十次综合导航| 欧美精品在线观看一区二区| 亚洲欧美日本在线| www.亚洲激情.com| 亚洲视频免费在线| 暴力调教一区二区三区| 国产日韩精品一区二区三区 | 国产欧美日韩麻豆91| 久久99久久99| 欧美xxxxx裸体时装秀| 蜜芽一区二区三区| 欧美成人aa大片| 国产一区日韩二区欧美三区| 精品日韩99亚洲| 国产在线一区观看| 久久久一区二区三区| 国产资源精品在线观看| 久久综合狠狠综合久久综合88| 久久黄色级2电影| 精品88久久久久88久久久| 九一九一国产精品| www国产精品av| 国产成人aaaa| 亚洲美女偷拍久久| 欧美日韩高清一区二区三区| 午夜成人免费视频| 日韩一区二区精品在线观看| 激情文学综合丁香| 国产精品久久久久影院老司| 91同城在线观看| 亚洲v日本v欧美v久久精品| 自拍偷自拍亚洲精品播放| 色视频一区二区| 日韩专区中文字幕一区二区| 欧美一级艳片视频免费观看| 极品少妇xxxx偷拍精品少妇| 国产亚洲一区二区三区| av动漫一区二区| 亚洲国产精品一区二区www| 91麻豆精品国产91| 国产精品1024| 亚洲一区二区高清| 精品盗摄一区二区三区| 99riav久久精品riav| 日韩电影一二三区| 欧美日韩一区二区在线观看视频|