디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

변태 대두는 봅니다

pandah갤로그로 이동합니다. 2011.03.14 00:53:26
조회 93 추천 0 댓글 9


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define ERASED     0
#define VALID       1
#define INVALID     2

#define M_READ      0
#define M_WRITE     1

#define NUMOFPAGE   64          // total # of page == # of page table
#define NUMOFBLOCK  16          // total # of block
#define NUMOFPAGEINBLOCK    4   // # of page in block
#define STATE  0           // To store [valid, invalid, erased]
int pagetable[NUMOFPAGE];
int totwritecnt = 0;

// page struct
typedef struct NANDpage {
        unsigned char data[512];
        char spare[16];
} NANDpage;

// block struct
typedef struct NANDblock {
        NANDpage pageinB[NUMOFPAGEINBLOCK];
} NANDblock;

NANDblock *nb;

// get_reqlpa()
int get_reqlpn() {
        int retValue;
        retValue = rand() % NUMOFPAGE;
        return (retValue);
}

// get_ppn_PT(), if hit then returns ppn, else -1
int get_ppn_PT(int lpn) {
        if (pagetable[lpn] >= 0) {
                return (pagetable[lpn]);
        }
        return -1;
}

// get_free_page in physical block
int get_free_page() {
        int i = 0, j = 0;
        char state_tmp;

        for (i = 0; i < NUMOFBLOCK; i++) {
                for (j = 0; j < NUMOFPAGEINBLOCK; j++) {
                        //실제 프로그램 플로우에서 죽는 부분은 이부분
                        state_tmp = nb[i].pageinB[j].spare[STATE];
                        if (state_tmp == ERASED) {
                                return (i * 4 + j);
                        }
                }
        }
        return -1; // no free page!
}

// write_lpn()
int write_lpn(int lpn, char *buffer) {
        int ppn, blockN, pageN, temp;
        ppn = get_ppn_PT(lpn); // get ppn from the page table
        temp = get_free_page(); // get free ppn, from the physical block

        if (temp >= 0) {
                if (ppn >= 0) {
                        blockN = ppn / NUMOFPAGEINBLOCK;
                        pageN = ppn / NUMOFPAGEINBLOCK;
                        nb[blockN].pageinB[pageN].spare[STATE] = INVALID;
                }

                pagetable[lpn] = temp;
                blockN = temp / NUMOFPAGEINBLOCK;
                pageN = temp % NUMOFPAGEINBLOCK;
                nb[blockN].pageinB[pageN].spare[STATE] = VALID;
                totwritecnt++;
                return 0;
        }
        return 0;
}

// init_block() : init block and pagetable
void init_block(NANDblock *nb) {
        int i = 0, j = 0;
        char tempbuf[] = "INIT DATA";

// 디버깅 해보니 이 부분이 에러였다.
// 여기선 init_block에 넘어온 local variable인 nb에 malloc 을 해버려서 
// get_free_page()함수 호출시 global variable은 allocate되지 않은상태.

        nb = (NANDblock *) malloc(NUMOFBLOCK * sizeof(NANDblock));

        for (i = 0; i < NUMOFBLOCK; i++) {
                for (j = 0; j < NUMOFPAGEINBLOCK; j++) {
                        memcpy(nb[i].pageinB[j].data, tempbuf, 512);
                        nb[i].pageinB[j].spare[STATE] = ERASED;
                }
        }
        for (i = 0; i < NUMOFPAGE; i++) {
                pagetable[i] = -1;
        }
}

// display()
void display() {
        int i = 0, j = 0;
        char tmp;
        puts(
                        "--------------------------------------------------------------------------------------------------");
        puts(
                        "-------------------------------------------PHYSICAL MAP-------------------------------------------");
        for (i = 0; i < NUMOFBLOCK; i++) {
                printf("BLOCK %d : \\t", i);
                for (j = 0; j < NUMOFPAGEINBLOCK; j++) {
                        tmp = nb[i].pageinB[j].spare[STATE];
                        if (tmp == VALID)
                                printf("\\t%d\\t[V]\\t\\t", j);
                        else if (tmp == INVALID)
                                printf("\\t%d\\t[I]\\t\\t", j);
                        else if (tmp == ERASED)
                                printf("\\t%d\\t[E]\\t\\t", j);
                        else
                                puts("Error stste!!!");
                }
                printf("\\n");
        }
        puts(
                        "--------------------------------------------------------------------------------------------------");
}

int main(int argc, char *argv[]) {
        int lpn, loop = 1, result;
        char *buffer = {0};

        init_block(nb);

        srand(time(NULL)); // to get random lpn

        while (loop) {
                lpn = get_reqlpn();
                result = write_lpn(lpn, buffer);
                if (totwritecnt == NUMOFPAGE || result < 0) {
                        puts("PHYSICAL PAGES ARE FULL!");
                        break;
                }
        }
        display();
        return 0;
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 외모와 달리 술 일절 못 마셔 가장 의외인 스타는? 운영자 24/07/01 - -
238915 네이버 경력직 Pre-Test 봐본횽있어요? [2] 사회인(121.166) 11.03.18 1471 0
238914 횽들은 넷북 안 씀? 넷북사고 싶은데 싸고 쓸만하게 살 방법 없나? [1] ㅇㅇㅇ(121.144) 11.03.18 93 0
238913 일본을 구원할 미국인 원전전문가. [3] 슈밤ar(183.106) 11.03.18 165 0
238912 금탁 2일째 [2] elwlwlwk갤로그로 이동합니다. 11.03.18 140 0
238911 아이폰 DB 데이터 변환공식 [8] 우아아갤로그로 이동합니다. 11.03.18 105 0
238910 ㅇㅇ 횽, 쿄스케형 [7] 슈밤ar(183.106) 11.03.18 63 0
238909 쿄스케횽 [5] ㅇㅇ(116.40) 11.03.18 68 0
238908 현 페이지 전체 이미지 가져오기 (wget??) [1] ooowww(119.206) 11.03.18 159 0
238907 사랑하는 쿄스케형 [4] 슈밤ar(183.106) 11.03.18 79 0
238906 형들..AR 어플인 mixare 이거 분석사이트 없나여? [6] 슈밤ar(183.106) 11.03.18 4377 0
238905 오늘면접보는디 [4] 시크한훈남갤로그로 이동합니다. 11.03.18 160 0
238904 아 Return Value Optimization... [1] SODmaster갤로그로 이동합니다. 11.03.18 82 0
238903 베이스샀당 ^ㅅ^ [4] elwlwlwk갤로그로 이동합니다. 11.03.18 115 0
238901 원격 데스크탑 ㅅ.....ㅂ [4] 똥구녕향기갤로그로 이동합니다. 11.03.18 104 0
238900 프갤러들 친절하당 ㄹㅇㄴ(210.178) 11.03.18 102 0
238899 프로그래머는 숙제 봄.니.다. [4] 물속의다이아갤로그로 이동합니다. 11.03.18 137 0
238898 MFC질문점여 [4] MFC발(58.229) 11.03.18 124 0
238895 수업 자체가.. 교수한테 수업받는거랑 강사한테 받는거랑.. 크지 않나요? [3] ㅇㅇ(222.113) 11.03.18 112 0
238894 트럭은 봉고가 갑이셨제 기아 봉고(58.224) 11.03.18 76 0
238892 오늘 기사 봤뜸? 여자로서 직장 동료는 최악이래 [10] (125.7) 11.03.18 324 0
238891 아! 가카!! [1] iljeomobolt갤로그로 이동합니다. 11.03.18 67 0
238890 해일리는 봄.니.다. [7] 물속의다이아갤로그로 이동합니다. 11.03.18 94 0
238889 오늘은 이거다!!! [2] 은행강도갤로그로 이동합니다. 11.03.18 123 0
238888 꾹꾹 누르고 두들겨보라고! [2] SODmaster갤로그로 이동합니다. 11.03.18 107 0
238887 오랜만에 은강♡해일리 네여 [3] SODmaster갤로그로 이동합니다. 11.03.18 81 0
238886 본격 은강횽 인사글 [14] 해일리갤로그로 이동합니다. 11.03.18 97 0
238885 서비스 좀 받으려 하면 회사가 망하네 이모군(1.225) 11.03.18 70 0
238884 211.245.***.*** 개색끼야 [1] SODmaster갤로그로 이동합니다. 11.03.18 80 0
238883 자바 고수형들 ㅠㅠ 뉴비가 질문좀 [12] 겔겔파워갤로그로 이동합니다. 11.03.18 119 0
238882 학학 왜 내가 3년전 했던 과목을 다시 들어야할까 [2] 어슐러르귄갤로그로 이동합니다. 11.03.18 123 0
238880 ☆이지스원,이지스원 시큐리티 교육센터 소개☆ [1] aegis1갤로그로 이동합니다. 11.03.18 58 0
238877 c++에서 %가머임? [4] 이모리아갤로그로 이동합니다. 11.03.18 95 0
238875 살려주세여. [2] 기타신동갤로그로 이동합니다. 11.03.18 90 0
238874 땡깡류 甲 ㄹㅇㄴ(210.178) 11.03.18 121 0
238873 닌텐도 WII의 위력 LightEach갤로그로 이동합니다. 11.03.18 80 0
238872 진짜 방송국들이 홈페이지 있는거처럼. [1] SODmaster갤로그로 이동합니다. 11.03.18 64 0
238871 대륙의 여자거지 [2] LightEach갤로그로 이동합니다. 11.03.18 173 0
238870 외쳐! [1] SODmaster갤로그로 이동합니다. 11.03.18 38 0
238868 c언어 초보인데 간단한거 하나만 물어볼게 [7] 형들(175.197) 11.03.18 130 0
238867 삼성역이나 선릉역에서 일하는 횽들에게 주는 정보 - 도시락 반값 쿠폰 [1] 쩐다(121.66) 11.03.18 97 0
238866 나는 7ㅐ발자다 [8] 에이스1번갤로그로 이동합니다. 11.03.18 267 0
238865 아 심심하다. 먹튀(203.249) 11.03.18 66 0
238862 안드로이드개발하다가 아이폰개발하면서 느낀게 .. [5] 임베디드(61.84) 11.03.18 181 0
238861 C프로그램 책으로만으로 공부 가능하냐? [10] ㅇㅇㅇㅇ(211.245) 11.03.18 266 0
238860 방금 들은 재밌는 이야기. [6] 물속의다이아갤로그로 이동합니다. 11.03.18 148 0
238859 여자는 어장관리해도 욕 안 먹는데, 남자는 욕 먹나? [3] ㅇㅇ(222.107) 11.03.18 195 0
238858 이젠 인쌥쎤 재밌다는 더이상 못하겠어... [1] Gromit갤로그로 이동합니다. 11.03.18 122 0
238857 너님들은 내가 보기엔... [4] 분당살람갤로그로 이동합니다. 11.03.18 121 0
238854 batch 질문 분뇨기갤로그로 이동합니다. 11.03.18 42 0
238853 MVC 패턴 어찌 생각하시나요 [3] 아땝갤로그로 이동합니다. 11.03.18 107 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2