디시인사이드 갤러리

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

갤러리 본문 영역

[조공] 아 횽들 제발 도와줘...ㅠㅠ

변태대두갤로그로 이동합니다. 2011.03.14 00:30:12
조회 269 추천 0 댓글 4




다른게 아니라 내가 요즘 디버깅 공부를 하는데

나온 예제인데 디버깅 방법은 알겠는데 내가 참 븅신인게...

이 소스코드의 오류를 모르겠어...-_- 대충 전역 변수 관련되서 문제인거 같은데

제발 도와줘...ㅠㅠ 나의 무능함에 정말 눈물이 흘러... 가르침을... 코드가 좀 길긴해...

#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 - -
239002 난 내가 이렇게 공부를 열심히 할줄 몰랐다능 [2] 허허벌판갤로그로 이동합니다. 11.03.19 88 0
239001 C와 마소의 폭풍몰락, 그리고 자바의 황제등극 [4] 인생100%(61.255) 11.03.19 212 0
239000 enum은 진짜 신기한거같음 [1] 어슐러르귄갤로그로 이동합니다. 11.03.19 157 0
238999 35살 정년 떡밥? ㅋ [11] 미라발칸갤로그로 이동합니다. 11.03.19 284 0
238998 핑 마이너스 [2] 이모군(1.225) 11.03.18 167 0
238997 횽들 openGL 에서 더블 버퍼링 할 때ㅠㅠㅠ [3] openGL(210.113) 11.03.18 135 0
238996 winhex 써보신분 있나요? 금고래갤로그로 이동합니다. 11.03.18 212 0
238995 엑티비티라는게.... 그냥 웹페이지 정도라고 생각하면됨? [1] 필리라(113.59) 11.03.18 50 0
238994 심심해서 퀴즈 Eric Schmidt(121.134) 11.03.18 107 0
238993 진짜 모르겟어 데몬쓰는거하고 putty 쓰고 커널파일 c하드에 공유하고 [3] 풋사과1갤로그로 이동합니다. 11.03.18 80 0
238992 끝났다 [2] elwlwlwk갤로그로 이동합니다. 11.03.18 82 0
238991 음정비교 하는 라이브러리 없습니까? [1] ....(220.67) 11.03.18 262 0
238990 DB 프로그래머가 제일 갑이다. [10] 인생100%(61.255) 11.03.18 503 0
238989 엄마 집에 기고싶아요 ㅠㅠㅠ elwlwlwk갤로그로 이동합니다. 11.03.18 78 0
238988 형들 포트폴리오 아이디어좀..굽신..ㅠㅠ 123(218.236) 11.03.18 78 0
238987 유동닉한테는 글설리도 달지마. [3] 삼류개발자갤로그로 이동합니다. 11.03.18 77 0
238986 안드로이드에서 이 프로그램을 만들때 필요한 기술이 뭘까? 필리라(113.59) 11.03.18 100 0
238985 횽들 C# 책좀 추천해줘 나카쥰갤로그로 이동합니다. 11.03.18 52 0
238984 내가 봤을 때 프로그램은 다양한 지식의 집합체라는 생각이 든다. [3] z(61.43) 11.03.18 98 0
238983 ㅜㅜ 이거 언제끝나는거야 ㅜㅜ elwlwlwk갤로그로 이동합니다. 11.03.18 80 0
238982 내가 봤을 때 프로그래밍은 존나 다양하게 알아야 한다. [1] ㅇㅇ(61.43) 11.03.18 67 0
238981 엑셀파일 c나java와 연동하는방법? [6] 씨씨(113.59) 11.03.18 185 0
238980 아무지식이 없는놈도 3개월 학원과정이면 실무투입이라니... [2] 이상하다(113.59) 11.03.18 193 0
238979 과제하면서 영어의 중요성을 뼈저리게 느끼고있음 ㅁㄴㅇㄹ(59.17) 11.03.18 67 0
238976 PC방인데 존나 수상한 프로그램이 실행되고있음ㅎㄷㄷ.jpg [3] 린레기2갤로그로 이동합니다. 11.03.18 216 0
238975 오늘은 왜 35살 떡밥임? Rei@디씨갤로그로 이동합니다. 11.03.18 96 0
238974 리눅스 터미널 디텍토리에서 명령어로 상위디텍토리로 어떻게나감 [2] 풋사과1갤로그로 이동합니다. 11.03.18 102 0
238973 솔직히 난 컴공들어올 때 프로그래머가 종류가 하난지 알앗음 [3] 어슐러르귄갤로그로 이동합니다. 11.03.18 267 0
238971 개강총회하는중 [3] elwlwlwk갤로그로 이동합니다. 11.03.18 98 0
238970 정성을 들인 객체 떡밥 투척! [1] SODmaster갤로그로 이동합니다. 11.03.18 101 0
238969 토익보고왔다... [1] 꿀레(14.33) 11.03.18 69 0
238968 형들.........ㅠ 이것좀크랙해줘 ㅠㅠ [2] 저질체력갤로그로 이동합니다. 11.03.18 88 0
238967 형들 좀 도와줘 내가 만들고 싶은 어플이 있는데.... [1] 개마무사갤로그로 이동합니다. 11.03.18 382 0
238965 나에게 씨뿔뿔은 사치 그 이상이엇다 [5] C++(221.155) 11.03.18 162 0
238964 디씨는 우리들을 모셔가야 하는거 아냐?? [1] 부락페스티발갤로그로 이동합니다. 11.03.18 98 0
238963 35가 정년이 아니고, 35살 먹도록 남밑에서 일하는건 ㅄ이란 뜻이지 [2] 계백(61.255) 11.03.18 196 0
238961 지도교수님이 기업에 요청해서 세미나 자주하시는데 기술세미나->취업설명으로 ㅁㄴㅇㄹㄴ(203.234) 11.03.18 54 0
238960 진짜 35살이 프로그래머로써 끝이야? [7] 디레(61.252) 11.03.18 376 0
238959 아리까리해용. 시스템 프로그램, 펌웨어, 미들웨어, 임베디드???? [2] 하앍하앍(123.199) 11.03.18 186 0
238958 여기 갤러들은 대학 컴공과 나왔음? [6] 디레(61.252) 11.03.18 303 0
238957 아땝님 보세요~ [14] 질문자(121.140) 11.03.18 118 1
238956 군대 가서 자신감이 좀 생겼다가 복학하니 또 자괴감에 빠짐 [6] ㅁㄴㅇㄹㄴ(203.234) 11.03.18 220 0
238955 횽들 주말 잘 보내! 이번 주도 수고했어 T.T [3] 해일리갤로그로 이동합니다. 11.03.18 86 0
238953 죽이는거없나? [2] 풋사과1갤로그로 이동합니다. 11.03.18 149 0
238952 횽들 .포폴문서 확장자 hwp는 지양해야겟지?? [6] 미역c(203.237) 11.03.18 136 0
238951 아래 조합질문 다시하번 해볼게요 질문이 이상했었나봐요 [3] 질문자(121.140) 11.03.18 77 0
238950 안드로이드 앱만드는데 서비스가 안꺼져 [3] ㅁㄴㅊ(115.95) 11.03.18 114 0
238949 프로그래밍 배워보려고 하는데 C배운이후에 C++를 배워야 하나요?? [11] 부왘ㅋㅋㅋ(121.186) 11.03.18 239 0
238948 우체국 시발롬들아 [3] 캐닭(211.248) 11.03.18 119 0
238947 비야네 스트룹스트롭이 맞음 스트롭스트룹이 맞음? [4] 어슐러르귄갤로그로 이동합니다. 11.03.18 195 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2