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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? physmem.c

?? Simple Operating Systems (簡(jiǎn)稱SOS)是一個(gè)可以運(yùn)行在X86平臺(tái)上(包括QEMU
?? C
字號(hào):
/* Copyright (C) 2004  David Decotigny   This program is free software; you can redistribute it and/or   modify it under the terms of the GNU General Public License   as published by the Free Software Foundation; either version 2   of the License, or (at your option) any later version.      This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.      You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   USA. */#include <sos/list.h>#include <sos/macros.h>#include <sos/assert.h>#include <sos/klibc.h>#include "physmem.h"/** A descriptor for a physical page in SOS */struct physical_page_descr{  /** The physical base address for the page */  sos_paddr_t paddr;  /** The reference count for this physical page. > 0 means that the     page is in the used list. */  sos_count_t ref_cnt;  /** The other pages on the list (used, free) */  struct physical_page_descr *prev, *next;};/** These are some markers present in the executable file (see sos.lds) */extern char __b_kernel, __e_kernel;/** The array of ppage descriptors will be located at this address */#define PAGE_DESCR_ARRAY_ADDR \  SOS_PAGE_ALIGN_SUP((sos_paddr_t) (& __e_kernel))static struct physical_page_descr * physical_page_descr_array;/** The list of physical pages currently available */static struct physical_page_descr *free_ppage;/** The list of physical pages currently in use */static struct physical_page_descr *used_ppage;/** We will store here the interval of valid physical addresses */static sos_paddr_t physmem_base, physmem_top;/** We store the number of pages used/free */static sos_count_t physmem_total_pages, physmem_used_pages;sos_ret_t sos_physmem_setup(sos_size_t ram_size,			    /* out */sos_paddr_t *kernel_core_base,			    /* out */sos_paddr_t *kernel_core_top){  /* The iterator over the page descriptors */  struct physical_page_descr *ppage_descr;  /* The iterator over the physical addresses */  sos_paddr_t ppage_addr;  /* Make sure ram size is aligned on a page boundary */  ram_size = SOS_PAGE_ALIGN_INF(ram_size);/* Yes, we may lose at most a page */  /* Reset the used/free page lists before building them */  free_ppage = used_ppage = NULL;  physmem_total_pages = physmem_used_pages = 0;  /* Make sure that there is enough memory to store the array of page     descriptors */  *kernel_core_base = SOS_PAGE_ALIGN_INF((sos_paddr_t)(& __b_kernel));  *kernel_core_top    = PAGE_DESCR_ARRAY_ADDR      + SOS_PAGE_ALIGN_SUP( (ram_size >> SOS_PAGE_SHIFT)			    * sizeof(struct physical_page_descr));  if (*kernel_core_top > ram_size)    return -SOS_ENOMEM;  /* Page 0-4kB is not available in order to return address 0 as a     means to signal "no page available" */  physmem_base = SOS_PAGE_SIZE;  physmem_top  = ram_size;  /* Setup the page descriptor arrray */  physical_page_descr_array    = (struct physical_page_descr*)PAGE_DESCR_ARRAY_ADDR;  /* Scan the list of physical pages */  for (ppage_addr = 0,	 ppage_descr = physical_page_descr_array ;       ppage_addr < physmem_top ;       ppage_addr += SOS_PAGE_SIZE,	 ppage_descr ++)    {      enum { PPAGE_MARK_RESERVED, PPAGE_MARK_FREE,	     PPAGE_MARK_KERNEL, PPAGE_MARK_HWMAP } todo;      memset(ppage_descr, 0x0, sizeof(struct physical_page_descr));      /* Init the page descriptor for this page */      ppage_descr->paddr = ppage_addr;      /* Reserved : 0 ... base */      if (ppage_addr < physmem_base)	todo = PPAGE_MARK_RESERVED;      /* Free : base ... BIOS */      else if ((ppage_addr >= physmem_base)	       && (ppage_addr < BIOS_N_VIDEO_START))	todo = PPAGE_MARK_FREE;      /* Used : BIOS */      else if ((ppage_addr >= BIOS_N_VIDEO_START)	       && (ppage_addr < BIOS_N_VIDEO_END))	todo = PPAGE_MARK_HWMAP;      /* Free : BIOS ... kernel */      else if ((ppage_addr >= BIOS_N_VIDEO_END)	       && (ppage_addr < (sos_paddr_t) (& __b_kernel)))	todo = PPAGE_MARK_FREE;      /* Used : Kernel code/data/bss + physcal page descr array */      else if ((ppage_addr >= *kernel_core_base)		&& (ppage_addr < *kernel_core_top))	todo = PPAGE_MARK_KERNEL;      /* Free : first page of descr ... end of RAM */      else	todo = PPAGE_MARK_FREE;      /* Actually does the insertion in the used/free page lists */      physmem_total_pages ++;      switch (todo)	{	case PPAGE_MARK_FREE:	  ppage_descr->ref_cnt = 0;	  list_add_head(free_ppage, ppage_descr);	  break;	case PPAGE_MARK_KERNEL:	case PPAGE_MARK_HWMAP:	  ppage_descr->ref_cnt = 1;	  list_add_head(used_ppage, ppage_descr);	  physmem_used_pages ++;	  break;	default:	  /* Reserved page: nop */	  break;	}    }  return SOS_OK;}sos_paddr_t sos_physmem_ref_physpage_new(sos_bool_t can_block){  struct physical_page_descr *ppage_descr;  if (! free_ppage)    return (sos_paddr_t)NULL;  /* Retrieve a page in the free list */  ppage_descr = list_pop_head(free_ppage);  /* The page is assumed not to be already used */  SOS_ASSERT_FATAL(ppage_descr->ref_cnt == 0);  /* Mark the page as used (this of course sets the ref count to 1) */  ppage_descr->ref_cnt ++;  /* Put the page in the used list */  list_add_tail(used_ppage, ppage_descr);  physmem_used_pages ++;  return ppage_descr->paddr;}/** * Helper function to get the physical page descriptor for the given * physical page address. * * @return NULL when out-of-bounds or non-page-aligned */inline static struct physical_page_descr *get_page_descr_at_paddr(sos_paddr_t ppage_paddr){  /* Don't handle non-page-aligned addresses */  if (ppage_paddr & SOS_PAGE_MASK)    return NULL;    /* Don't support out-of-bounds requests */  if ((ppage_paddr < physmem_base) || (ppage_paddr >= physmem_top))    return NULL;  return physical_page_descr_array + (ppage_paddr >> SOS_PAGE_SHIFT);}sos_ret_t sos_physmem_ref_physpage_at(sos_paddr_t ppage_paddr){  struct physical_page_descr *ppage_descr    = get_page_descr_at_paddr(ppage_paddr);  if (! ppage_descr)    return -SOS_EINVAL;  /* Increment the reference count for the page */  ppage_descr->ref_cnt ++;  /* If the page is newly referenced (ie we are the only owners of the     page => ref cnt == 1), transfer it in the used pages list */  if (ppage_descr->ref_cnt == 1)    {      list_delete(free_ppage, ppage_descr);      list_add_tail(used_ppage, ppage_descr);      physmem_used_pages ++;      /* The page is newly referenced */      return FALSE;    }  /* The page was already referenced by someone */  return TRUE;}sos_ret_tsos_physmem_unref_physpage(sos_paddr_t ppage_paddr){  /* By default the return value indicates that the page is still     used */  sos_ret_t retval = FALSE;  struct physical_page_descr *ppage_descr    = get_page_descr_at_paddr(ppage_paddr);  if (! ppage_descr)    return -SOS_EINVAL;  /* Don't do anything if the page is not in the used list */  if (ppage_descr->ref_cnt <= 0)    return -SOS_EINVAL;  /* Unreference the page, and, when no mapping is active anymore, put     the page in the free list */  ppage_descr->ref_cnt--;  if (ppage_descr->ref_cnt <= 0)    {      /* Transfer the page, considered USED, to the free list */      list_delete(used_ppage, ppage_descr);      physmem_used_pages --;      list_add_head(free_ppage, ppage_descr);      /* Indicate that the page is now unreferenced */      retval = TRUE;    }  return retval;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
正在播放一区二区| 精品国产污污免费网站入口 | 欧美一级理论性理论a| 国产成人高清视频| 日韩成人免费在线| 亚洲美女免费视频| 久久精品亚洲麻豆av一区二区| 欧美在线免费观看视频| 成人开心网精品视频| 日本欧美一区二区三区乱码| 亚洲精品美腿丝袜| 国产亚洲短视频| 欧美一区二区在线免费播放| 在线亚洲精品福利网址导航| 国产成人av电影在线| 免费不卡在线观看| 亚洲一二三四区| 最近中文字幕一区二区三区| 欧美国产精品专区| 欧美mv和日韩mv国产网站| 欧美肥大bbwbbw高潮| 欧美午夜精品免费| 91麻豆国产福利在线观看| 成人免费黄色大片| 大胆欧美人体老妇| 国产精品一区二区久久不卡| 精品一区中文字幕| 蜜桃视频一区二区| 蜜桃av噜噜一区| 日韩国产精品久久久久久亚洲| 亚洲第一成年网| 亚洲一区二区综合| 亚洲国产精品麻豆| 亚洲成人中文在线| 午夜精品成人在线| 日韩有码一区二区三区| 天使萌一区二区三区免费观看| 亚洲一区二区av在线| 亚洲在线成人精品| 亚洲二区视频在线| 日日欢夜夜爽一区| 精品中文字幕一区二区| 国产一区二区三区综合| 懂色av一区二区三区免费看| 成人一区二区三区在线观看| 不卡一区在线观看| 95精品视频在线| 色综合久久综合| 欧美丝袜自拍制服另类| 欧美精品在线一区二区三区| 666欧美在线视频| 欧美成人三级电影在线| www久久久久| 国产精品亲子乱子伦xxxx裸| 亚洲激情成人在线| 日韩成人伦理电影在线观看| 久草在线在线精品观看| 国产成人精品三级| 99免费精品视频| 欧美日韩免费一区二区三区视频| 欧美一区二区日韩| 国产亚洲视频系列| 国产精品激情偷乱一区二区∴| 亚洲精品中文在线影院| 亚洲第四色夜色| 黄色日韩网站视频| 91美女视频网站| 欧美福利一区二区| 国产女人18水真多18精品一级做| 亚洲色图视频免费播放| 日韩av二区在线播放| 国产精品综合av一区二区国产馆| av成人动漫在线观看| 欧美日韩精品久久久| 国产视频一区在线观看| 一区二区三区色| 麻豆成人av在线| 99久久久久免费精品国产 | 欧美综合视频在线观看| 欧美一级一级性生活免费录像| 国产日韩影视精品| 午夜精品久久久久久久| 国产不卡视频在线观看| 欧美日韩一区二区在线观看视频| 精品国产乱码91久久久久久网站| 亚洲精选视频免费看| 国产麻豆日韩欧美久久| 欧美中文字幕一二三区视频| 久久免费的精品国产v∧| 一区二区高清视频在线观看| 国产乱人伦精品一区二区在线观看| 91极品美女在线| 国产视频一区在线播放| 青青草伊人久久| 色婷婷精品久久二区二区蜜臀av| 亚洲精品在线网站| 亚洲成av人片一区二区三区| 成人精品在线视频观看| 欧美α欧美αv大片| 亚洲一区二区在线观看视频 | 一区二区三区中文在线| 国产精品一区二区x88av| 欧美日韩久久久久久| 国产精品国产自产拍在线| 极品少妇一区二区| 欧美日韩一区二区三区在线| 国产精品污www在线观看| 国产资源精品在线观看| 777午夜精品免费视频| 亚洲欧美国产三级| 丁香啪啪综合成人亚洲小说| 日韩精品一区在线观看| 午夜电影网亚洲视频| 色播五月激情综合网| 国产精品萝li| 国产一区二区剧情av在线| 91精品国产综合久久久蜜臀粉嫩 | 日韩专区欧美专区| 欧美在线啊v一区| 亚洲天堂av老司机| 国产ts人妖一区二区| 久久久久国产精品免费免费搜索| 免费久久99精品国产| 91精品国产综合久久精品图片 | 亚洲精品视频在线| 播五月开心婷婷综合| 国产精品视频看| 国产成人精品影视| 国产女同互慰高潮91漫画| 国产成人无遮挡在线视频| 久久久美女艺术照精彩视频福利播放| 免费观看91视频大全| 日韩欧美高清dvd碟片| 久久精品国产77777蜜臀| 日韩午夜激情电影| 久久99国产精品久久99 | 午夜日韩在线电影| 欧美猛男gaygay网站| 香港成人在线视频| 日韩一区二区三区免费观看| 美日韩一区二区三区| 亚洲精品在线观| 高清国产一区二区三区| 中文字幕在线视频一区| 色欲综合视频天天天| 亚洲成人在线网站| 精品欧美一区二区久久| 国产自产高清不卡| 国产精品色呦呦| 91麻豆免费视频| 亚洲成人www| 亚洲精品在线三区| 9久草视频在线视频精品| 亚洲欧美经典视频| 欧美日韩国产精品成人| 免费看欧美女人艹b| 久久久久久亚洲综合影院红桃 | 国产91在线|亚洲| 亚洲日本青草视频在线怡红院| 日本韩国一区二区| 久久精品国产免费看久久精品| 久久九九久久九九| 色欲综合视频天天天| 免费一级片91| 中文字幕一区二区三区四区| 欧美日韩视频在线观看一区二区三区| 日韩国产精品大片| 中文字幕不卡一区| 欧美综合一区二区| 国产伦精品一区二区三区视频青涩| 国产精品久久99| 欧美一区午夜精品| 99re这里只有精品视频首页| 丝袜美腿亚洲色图| 国产精品麻豆久久久| 制服丝袜成人动漫| 成人美女在线观看| 日韩激情av在线| 国产精品萝li| 欧美一区二区福利在线| 成人高清av在线| 蜜桃久久久久久| 亚洲乱码日产精品bd| 精品卡一卡二卡三卡四在线| 在线欧美一区二区| 国产不卡一区视频| 免费成人结看片| 亚洲精品美国一| 中文字幕不卡在线观看| 日韩精品中文字幕一区二区三区| 91亚洲男人天堂| 狠狠色综合日日| 亚洲成精国产精品女| 亚洲欧洲99久久| 精品日韩成人av| 91精品国产乱码久久蜜臀| 色欧美88888久久久久久影院| 国产一区二区影院| 免费在线一区观看| 亚洲夂夂婷婷色拍ww47|