디시인사이드 갤러리

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

갤러리 본문 영역

변태대두는 봄.니.다.

물속의다이아갤로그로 이동합니다. 2011.03.14 00:32:27
조회 94 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [71] 운영자 20.09.28 36057 62
2721451 진지하게 아래기술 다써서 프젝하면 신입도 취업됨 [3] 프갤러(118.235) 19:19 16 0
2721450 C++ 인생 40 년 갈아 넣었습니다. C++ 마스터하는 방법. 프갤러(59.16) 19:18 4 0
2721449 1 9 ) 꽁떡개꿀팁 공유.jpg ㅇㅇ(121.135) 19:17 0 0
2721448 공부하기 싫을때 듣는 노래 ㅇㅇ갤로그로 이동합니다. 19:13 2 0
2721447 1 9 ) 섹톡 레전드.jpg ㅇㅇ(121.135) 19:13 0 0
2721446 상사가 너무 좆같으면 어떻게 해야됨 [1] ㅇㅇ(211.234) 19:12 11 0
2721445 토마토 주스 마시는 중 발명도둑잡기갤로그로 이동합니다. 19:10 3 0
2721444 1 9 ) 꽁떡개꿀팁 공유.j pg ㅇㅇ(121.135) 19:08 2 0
2721443 자기가 머리 좋은거 증명 안될거같으면 신입 개발자 취업 접어라 ㅇㅇ(112.150) 19:07 9 0
2721442 1 9 ) 승무원출신 섹파만든썰.jpg ㅇㅇ(121.135) 19:04 1 0
2721441 짱꼴라 국회청원폭동 100만마리 진압하라!!!! 자유대한만세 윤카만세 통정희박대령갤로그로 이동합니다. 19:01 5 0
2721440 1 9 ) 꽁떡개꿀팁 공유.jpg ㅇㅇ(121.135) 19:00 2 0
2721439 오곡 미숫가루 마시는 중 발명도둑잡기갤로그로 이동합니다. 18:57 4 0
2721438 1 9 ) 섹톡 레전드.jpg ㅇㅇ(121.135) 18:56 2 0
2721437 1 9 ) 꽁떡개꿀팁 공유.j pg ㅇㅇ(121.135) 18:51 3 0
2721436 야근없네 6시 칼퇴한다 엌ㅋㅋㅋㅋㅋ ㅇㅇ(39.7) 18:49 12 0
2721435 1 9 ) 승무원출신 섹파만든썰.jpg ㅇㅇ(121.135) 18:48 4 0
2721434 콩나물 비빔밥 곱빼기로 먹고왔따 프갤러(121.172) 18:45 27 1
2721433 1 9 ) 꽁떡개꿀팁 공유.jpg ㅇㅇ(121.135) 18:44 6 0
2721432 프갤에서 조리돌림당한 국비충 6000찍엇노 ㅇㅇ(39.7) 18:42 22 0
2721431 플젝시작 하고 퇴사선언해야지 ㅇㅇ(211.234) 18:40 20 0
2721430 1 9 ) 섹톡 레전드.jpg ㅇㅇ(121.135) 18:40 5 0
2721428 학벌 안좋은데 국비 듣는 애들은 열심히 하지마셈 [6] ㅇㅇ(223.39) 18:37 80 0
2721426 나는내향적이야 나는내향적이야 통정희박대령갤로그로 이동합니다. 18:36 5 0
2721425 서현역 강남역 시청역 [2] 발명도둑잡기갤로그로 이동합니다. 18:34 22 0
2721424 원종이가 한국 위인급이라 다들 따라하는거임 ㅇㅅㅇ 류류(118.235) 18:33 11 0
2721423 날 왜 부르지 싶은 곳에서 면접 제의가 왔다 프갤러(220.84) 18:33 17 0
2721422 시청역 교통사고는 원종이 보고 감명받아서 실행한거 류류(118.235) 18:32 14 1
2721421 비전공자 입문 C 필요성 [10] 프갤러(14.37) 18:30 46 0
2721420 빵집을 그냥 지나쳤다 발명도둑잡기갤로그로 이동합니다. 18:30 10 0
2721419 요즘 차량개돌 때문에 초록불에도 좌우살펴야 함 헬마스터갤로그로 이동합니다. 18:27 11 0
2721417 요즘 인도로 차량 개돌이 유행이라는데 [2] 헬마스터갤로그로 이동합니다. 18:26 28 0
2721416 나트륨 퇴근 못해 ㅜㅜ [2] 나트륨찡갤로그로 이동합니다. 18:26 20 0
2721415 스타트업이랑 좋소랑 차이가 있음? [4] 프갤러(110.13) 18:16 37 0
2721414 ⭐+남자칭구❤+ [1] ♥냥덩Pay♥갤로그로 이동합니다. 18:06 26 0
2721413 카카오 구름톤 트레이닝이거 아는 사람 있나요? [5] 프갤러(61.253) 18:04 34 0
2721412 삼촌들 다들 커피 한 잔 하고 하이소 40대프린이(121.189) 18:03 21 0
2721411 살자... 프갤러(211.36) 18:00 10 0
2721410 딱국이 요즘 어디감? [3] 프갤러(211.112) 17:59 46 1
2721408 비전공 전산 [1] 프갤러(223.39) 17:48 31 0
2721407 솔직히 마크다운 같이 문단을 P태그로 표현하는 것보다, ㅇㅇ(49.105) 17:48 15 0
2721406 왜 RX만 붙으면 죄 병신이 되는거같노 [2] 프갤러(118.33) 17:29 39 0
2721405 밥 먹구 와야쥐~ 프갤러(121.172) 17:29 41 1
2721404 씨발대기업개새끼들때문에내가이재명못끊지ㅋㅋ씹새끼들대가리딱대 보법E노무현갤로그로 이동합니다. 17:25 20 0
2721403 제조 it 왜 욕하는거임? [3] 프갤러(121.135) 17:24 51 0
2721401 사소한 디테일이 나비효과 [1] ♥냥덩Pay♥갤로그로 이동합니다. 17:21 21 0
2721399 피곤하고 우울해 주아갤로그로 이동합니다. 17:15 10 0
2721398 깃허브 잔디, 블로그 관리 중요함? [2] 프갤러(122.32) 17:15 56 0
2721397 학사따리 ai 부캠 다니면 취업 가능? (몰라서 물어봄) [10] 프갤러(110.15) 17:14 70 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2