디시인사이드 갤러리

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

갤러리 본문 영역

변태 대두는 봅니다

pandah갤로그로 이동합니다. 2011.03.14 00:53:26
조회 97 추천 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/09/30 - -
268695 물어볼게있어용... wmain [6] 공학계산갤로그로 이동합니다. 11.08.31 112 0
268693 씨박.. 좆됐다 -_-' [3] 공대(119.196) 11.08.31 75 0
268691 군대 육군 전산병으로 제대하신 형있나요?? [4] ㅇㅇ(121.169) 11.08.31 227 0
268689 캐꼬꼬닭 봐라 [45] (61.102) 11.08.31 210 0
268687 효성이와 눈싸움 하기!! [2] blackd갤로그로 이동합니다. 11.08.31 125 0
268686 이쯤에서 회사자랑 [1] 좋은아버지갤로그로 이동합니다. 11.08.31 62 0
268685 아니 효성이를 왜 빠는지 모르겠다?? [5] 거칠게갤로그로 이동합니다. 11.08.31 130 0
268684 곧 추석이 다가온다 다들 선물은 준비 했능가?? [2] 거칠게갤로그로 이동합니다. 11.08.31 77 0
268680 형들 생각 은 어때? my opinion of 야근 [6] 좋은아버지갤로그로 이동합니다. 11.08.31 67 0
268679 키큰 남자는 중고딩을 먹기 용이하다는게 사실인가염?? [2] 거칠게갤로그로 이동합니다. 11.08.31 149 0
268678 왜 댓글이 안써지냐? [9] blackd갤로그로 이동합니다. 11.08.31 70 0
268675 나 JLPT N1 합ㅋ격ㅋ [7] 땡칠도사갤로그로 이동합니다. 11.08.31 120 0
268674 캐꼬횽 키 SODMaster갤로그로 이동합니다. 11.08.31 30 0
268672 다들 비밀 폴더 하나씩은 있지? [3] 어떡해갤로그로 이동합니다. 11.08.31 56 0
268671 나 요즘 아이폰 어플 공부하는데 한계가 왔나보다 [1] 거칠게갤로그로 이동합니다. 11.08.31 65 0
268670 형들은 언제가 제일 서럽냐 [3] 지금,여기갤로그로 이동합니다. 11.08.31 53 0
268666 맛잇는피자 [5] SODMaster갤로그로 이동합니다. 11.08.31 79 0
268663 blackd횽 상용프로그램이 아니면 이런 방법도 있음 [2] 생각놀이갤로그로 이동합니다. 11.08.31 73 0
268662 맨날 갤질하면 채용에 가산점있나? [1] ㅁㄹ(220.117) 11.08.31 40 0
268661 컴공이면 랩실이나 동아리 하는게 낫냐 [3] 차도컴공남갤로그로 이동합니다. 11.08.31 288 0
268660 웹표준 코딩이 뭐냐? [1] 아히(220.117) 11.08.31 55 0
268659 지금 잡코 봤는데 디시인사이트 웹디자이너 모집하네 [1] ㅁㄹ(220.117) 11.08.31 46 0
268658 그럼 비베로 서버접속하는걸 만들어놓을때 계정 비번은 어케 처리하는거지?? [6] blackd갤로그로 이동합니다. 11.08.31 94 0
268656 암호화 되지 않은 암호를 소스에 포함하면 안되는 이유 [3] 생각놀이갤로그로 이동합니다. 11.08.31 90 0
268655 쿨타임 시작 좋은아버지갤로그로 이동합니다. 11.08.31 28 0
268654 비베로 짜여진 exe 파일... 다 뜯어볼수 있나? [7] blackd갤로그로 이동합니다. 11.08.31 187 0
268652 나도 은꼬르 쿄스케갤로그로 이동합니다. 11.08.31 84 0
268650 날씨 무쟈게덥다그치? [1] 三didas갤로그로 이동합니다. 11.08.31 46 0
268649 과제 없어도 오는 학생프겔러 손 [12] 생각놀이갤로그로 이동합니다. 11.08.31 148 0
268645 디자이너 에게 필요한 css3 html 웹표준 책 추천. [2] ㅁㄹ(220.117) 11.08.31 211 0
268642 젠장 더운데 시간도 안가는구나?!은꼴이닷 [1] 거칠게갤로그로 이동합니다. 11.08.31 103 0
268641 님들 제가 생각해낸 포인터 공부방법 평가점 ㅋㅋ [4] 다들알겟지만(211.104) 11.08.31 106 0
268638 더위야 가라!!!은꼴 대 방출이다!!! [2] 거칠게갤로그로 이동합니다. 11.08.31 136 0
268636 퇴근시간이 다가온다 은꼴 대투척이다!!! [3] 거칠게갤로그로 이동합니다. 11.08.31 130 0
268635 웹표준 배울라고 컴학원알아보니까 드럽게 비싸 [8] ㅁㄹ(220.117) 11.08.31 135 0
268632 맛폰 SD카드에 리눅스를 넣어서 부팅을 할수 있다던데 [1] 막장갤신학생갤로그로 이동합니다. 11.08.31 79 0
268630 영어 잘하면 프로그램 잘 할꺼 같아.. [1] blackd갤로그로 이동합니다. 11.08.31 105 0
268627 오늘 너무 덥다 헉헉 거칠게갤로그로 이동합니다. 11.08.31 39 0
268625 if 조건이나 case : () <요부분에 소수점 드러가면 에러나는데.. [4] 공익짜잉갤로그로 이동합니다. 11.08.31 85 0
268622 그나마 프갤이 낫다 [2] 뇌지랄갤로그로 이동합니다. 11.08.31 99 0
268621 미래의 아들에게 from 좋은 아버지 [1] 좋은아버지갤로그로 이동합니다. 11.08.31 58 0
268620 좀봐방 [3] 호솽갤로그로 이동합니다. 11.08.31 75 0
268618 호솽갤로그로 이동합니다. 11.08.31 19 0
268617 정말 아스횽은 게이컨셉하고 뗄수가 없구나 [2] 어떡해갤로그로 이동합니다. 11.08.31 40 0
268616 오랜만에 시플플 복습하는디 [2] 궁금증(211.104) 11.08.31 78 0
268615 방학동안 한것 정리. [1] ㅁㄴㅇ(175.116) 11.08.31 63 0
268613 나이 27살에 하고 싶은게 플그램이란걸 알았다.. [17] 27(122.108) 11.08.31 294 0
268612 근데요 [2] ㅇㅅㅇ(58.120) 11.08.31 63 0
268611 그런데 말입니다. [4] ㅇㅅㅇ(58.120) 11.08.31 72 0
268609 웹페이지에서의 자동 업로드. 자세한 설명 [42] blackd갤로그로 이동합니다. 11.08.31 209 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2