디시인사이드 갤러리

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

갤러리 본문 영역

변태대두는 봄.니.다.

물속의다이아갤로그로 이동합니다. 2011.03.14 00:32:27
조회 93 추천 0 댓글 6


#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";

        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 - -
238945 지금 옆에 있는놈이 외우고 있는 원주율 elwlwlwk갤로그로 이동합니다. 11.03.18 140 0
238943 형들 초보입문자인데 몇가지 질문좀 답변해주심 감사 [5] c언어입문(211.212) 11.03.18 119 0
238942 형들 C++ 부울식 질문좀! [4] ㅇㅅㅇ(118.221) 11.03.18 128 0
238941 C프로그래밍시간에 할게 없다 elwlwlwk갤로그로 이동합니다. 11.03.18 170 0
238940 연봉 2배 상승해씀ㅎㅎㅎㅎㅎ [5] 오예(121.66) 11.03.18 402 0
238939 간단한 질문좀 할께요. [14] 질문자(121.140) 11.03.18 140 0
238938 새내기 한테 다시 한번 말하지만. [4] ㅇㅇㅇ(58.225) 11.03.18 188 0
238937 떡밥 투척 [18] 유리한갤로그로 이동합니다. 11.03.18 291 0
238936 객췌지향 떩밥 [6] SODmaster갤로그로 이동합니다. 11.03.18 153 0
238935 복수전공이나 부전공을 전기전자해놔야겠다 ...가능하면.. ㅋㅋ(119.69) 11.03.18 80 0
238934 아이폰 DB 날짜 변환공식 다시질문. [13] 우아아갤로그로 이동합니다. 11.03.18 144 0
238933 캐고민.... [7] 씨발라드세요갤로그로 이동합니다. 11.03.18 104 0
238932 프로그래머하다가 나이먹어서퇴직하면 다른곳으로 이직할수도있있나여 형들?ㅠㅠ [3] ㅋㅋ(119.69) 11.03.18 146 0
238931 난 닭집을 차려도 프로그래밍을 놓치지 않을테다!! [18] 쿄스케갤로그로 이동합니다. 11.03.18 361 0
238930 아오 게임을 끊었더니.. SODmaster갤로그로 이동합니다. 11.03.18 59 0
238929 그러면 35세이후프로그래머들은 다닭이나 튀겨야하는거야? [5] ㅋㅋ(119.69) 11.03.18 262 0
238927 금요일은.. ㅇㅇ(116.40) 11.03.18 47 0
238926 사람은 배워야한다. [9] 씨발라드세요갤로그로 이동합니다. 11.03.18 233 0
238925 형들프로그래머수명 35세면끝이야? [2] ㅋㅋ(119.69) 11.03.18 277 0
238924 횽들 수학 왜 배우는거야? 아땝갤로그로 이동합니다. 11.03.18 81 0
238922 횽들 설계 왜 배우는거야? [2] SODmaster갤로그로 이동합니다. 11.03.18 122 0
238920 횽들 c를 왜 배우는거야? [15] dmsgod(203.227) 11.03.18 228 0
238919 C++로 짜라고! [4] SODmaster갤로그로 이동합니다. 11.03.18 167 0
238917 ㅇㅇ 형 소스 잘받았어. 고마워 쇼스케형 고마워 슈밤ar(183.106) 11.03.18 55 0
238916 쿄스케형은봅니다 [5] ㅇㅇ(116.40) 11.03.18 111 0
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 116 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
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2