System Programming

By Suntae Hwang

Fall Semester

Notice

    2015년 2학기 시스템 소프트웨어 시험 및 과제 점수 공지

    게시자: 전원표, 2015. 12. 22. 오전 5:16   [ 2015. 12. 22. 오전 5:17에 업데이트됨 ]

    참고하세요.

    2015, lmc-1.4.0.b0-p9 에서 오류 발생 증상과 대처법

    게시자: 허대영, 2015. 10. 10. 오전 4:59   [ 2015. 10. 10. 오전 5:35에 업데이트됨 ]

    보고된 증상 및 해결방법

    1. make run 혹은 ./lmc 를 실행했을 때, 아무런 진행이 되지 않는다.
        증상원인:
            CMOS 파일이 없는 경우 이러한 증상이 발생할 수 있습니다.
        해결방법:
            1) mainboard/CMOS 파일이 있는지 확인하고
            2) ln -sf mainboard/CMOS 
                위와 같이 실행하여, 현재 디렉토리에 관련 링크를 만들어줍니다.

    2. 세그멘테이션 폴트가 발생한다.
        증상원인:
            잘못된 메모리 주소를 참조하는 경우에 발생한다.
            LD/ST/JMP 등의 명령의 주소를 잘못 기술하거나, CMOS 파일이 잘못 기술되었을 경우에도 발생한다.
            BOOT 파일에 프로그램 코드가 잘못 작성된 경우가 대부분이다.
        해결방법:
            1) 프로그램 코드를 재확인한다.

    위의 방법으로 해결되지 않을 경우, 현재 배포된 최신 버전인 lmc-1.4.0.b0-p9을 다시 다운로드 받아 설치하세요.
    ./configure 및 make를 순서대로 실행 한 후, 동작을 확인하기 바랍니다.

    만약 계속해서 문제가 발생할 경우 lmc@cs.kookmin.ac.kr로 문의하기 바랍니다.

    2014 종합 점수 공지

    게시자: 최규연, 2014. 12. 25. 오후 10:07

    중간고사 점수 및 기말고사 점수와 과제 점수 공지합니다.


    2014년 과제물 채점 공지.

    게시자: markers@cs.kookmin.ac.kr, 2014. 12. 21. 오후 11:00


    과제물 1~7번까지의 성적을 공지합니다.

    각 과제물은 10점 만점입니다.

    시험 점수는 완료되는 대로 올리도록 하겠습니다.

    버그 수정: MKBOOT시 LENGTH 및 E 레코드 오류 수정: lmc-1.4.0.b0-p8 릴리즈

    게시자: 허대영, 2014. 12. 13. 오후 5:38   [ 2014. 12. 13. 오후 6:28에 업데이트됨 ]

    1. MKBOOT 오류를 다음과 같이 수정합니다.
          보고자: 민권홍(09학번,컴퓨터공학) 
          증상: (1) 모니터에서 MKBOOT 실행시, 생성된 레코드의 LENGTH 오류: 100 ~ 132 일경우 32로 계산되는 문제 --> 33이 되도록 수정함              
                  (2) 마지막 E 레코드에서 'E' 필드가 추가되지 않는 오류 수정
          다음 중 한가지 방법을 사용합니다.

       1-1. 압축해제
     ]$ tar xvzf /opt/lmc-1.4.0.b0-p8.tar.gz

       1-2. SVN을 통한 릴리즈 (다시 받기)
     ]$ svn co https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p8

       1-3. 기존의 받은 SVN 소스를 업데이트 하고자 할 경우
     ]$ cd lmc-1.4.0.b0-p7                                          SVN을 통해 받은 기존의 소스코드 위치로 이동
     ]$ svn ci -m "현재 개발한 내용 저장"                    SVN에 지금까지 수정한 내용 저장
     ]$ svn merge https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p8 .   수정반영


    ** 위 민권홍 학생은 MKBOOT와 관련하여 여러번 오류를 보고 및 해결하는 데 기여하여 기여자 목록에 등록합니다. 

    버그 수정: MKBOOT시 LENGTH 레코드 오류 수정: lmc-1.4.0.b0-p7 릴리즈

    게시자: 허대영, 2014. 12. 11. 오전 4:37

    1. 타이머 인터럽트로 인해 발생한 버그를 다음과 같이 해결합니다
          증상: (1) MKBOOT 실행 후 BOOT 프로그램에서 BL 코드의 LENGTH가 프로그램 END 주소로 되는 문제를 해결
          다음 중 한가지 방법을 사용합니다.

       1-1. 압축해제
     ]$ tar xvzf /opt/lmc-1.4.0.b0-p7.tar.gz

       1-2. SVN을 통한 릴리즈 (다시 받기)
     ]$ svn co https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p7

       1-3. 기존의 받은 SVN 소스를 업데이트 하고자 할 경우
     ]$ cd lmc-1.4.0.b0-p6                                          SVN을 통해 받은 기존의 소스코드 위치로 이동
     ]$ svn ci -m "현재 개발한 내용 저장"                    SVN에 지금까지 수정한 내용 저장
     ]$ svn merge https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p7 .   수정반영

    버그 수정: Change Cassette 에러, SetTimer 에러 수정 (lmc-1.4.0.b0-p6)

    게시자: 허대영, 2014. 12. 1. 오후 10:27   [ 2014. 12. 1. 오후 10:28에 업데이트됨 ]

    1. 스크린 장치의 출력모드 (텍스트 <-> 십진)  변경 방법 (재공지, 전과 동일함)

    // 스크린 장치 출력 모드를 변경하는 코드 스니펫
    MMIOEQU92000000
    SCRDEVICEEQU12
    SCRSETTPUSHB
    MOVB, SP
    MOVX, #MMIO+SCRDEVICE*10
    MOVA, #1
    MOV@3, A// 제어모드 활성화
    MOVA, #'N'
    MOV@4, A// 'N' 즉 테스트모드로 변경
    POPB
    RET
    SCRSETDPUSHB
    MOVB, SP
    MOVX, #MMIO+SCRDEVICE*10
    MOVA, #1
    MOV@3, A// 제어모드 활성화
    MOVA, #'D'
    MOV@4, A// 'D' 즉 십진모드로 변경
    POPB
    RET

    위의 코드를 자신의 프로그램에 포함시키고, CALL SCRSETT 혹은 CALL SCRSETD를 사용하여 호출한다.

    2. 타이머 인터럽트로 인해 발생한 버그를 다음과 같이 해결합니다
          증상: (1) 부팅시 setTimer 에러가 반복적으로 발생하는 문제 수정
                  (2) 모니터에서 Change Cassette 가 실행되지 않는 문제 수정( 이로 인해 asm 등이 제대로 동작하지 않는 것처럼 보였음 )
          다음 중 한가지 방법을 사용합니다.

       2-1. 압축해제
     ]$ tar xvzf /opt/lmc-1.4.0.b0-p6.tar.gz

       2-2. SVN을 통한 릴리즈 (다시 받기)
     ]$ svn co https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p6

       2-3. 기존의 받은 SVN 소스를 업데이트 하고자 할 경우
     ]$ cd lmc-1.4.0.b0-p5                                          SVN을 통해 받은 기존의 소스코드 위치로 이동
     ]$ svn ci -m "현재 개발한 내용 저장"                    SVN에 지금까지 수정한 내용 저장
     ]$ svn merge https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p6 .   수정반영

    스크린 장치 출력 모드 변경 방법 및 타이머 인터럽트로 인한 버그 수정 패치(lmc-1.4.0.b0.p5)

    게시자: 허대영, 2014. 11. 30. 오후 10:24   [ 2014. 11. 30. 오후 10:27에 업데이트됨 ]

    1. 스크린 장치의 출력모드 (텍스트 <-> 십진)  변경 방법

    // 스크린 장치 출력 모드를 변경하는 코드 스니펫
    MMIOEQU92000000
    SCRDEVICEEQU12
    SCRSETTPUSHB
    MOVB, SP
    MOVX, #MMIO+SCRDEVICE*10
    MOVA, #1
    MOV@3, A// 제어모드 활성화
    MOVA, #'N'
    MOV@4, A// 'N' 즉 테스트모드로 변경
    POPB
    RET
    SCRSETDPUSHB
    MOVB, SP
    MOVX, #MMIO+SCRDEVICE*10
    MOVA, #1
    MOV@3, A// 제어모드 활성화
    MOVA, #'D'
    MOV@4, A// 'D' 즉 십진모드로 변경
    POPB
    RET

    위의 코드를 자신의 프로그램에 포함시키고, CALL SCRSETT 혹은 CALL SCRSETD를 사용하여 호출한다.

    2. 타이머 인터럽트로 인해 발생한 버그를 다음과 같이 해결합니다
          증상: (1) 모니터 실행중에 갑자기 에러가 반복적으로 발생한다.
                  (2) CAT이 제대로 실행되지 않는다.
          다음 중 한가지 방법을 사용합니다.

       2-1. 압축해제
     ]$ tar xvzf /opt/lmc-1.4.0.b0-p5.tar.gz

       2-2. SVN을 통한 릴리즈 (다시 받기)
     ]$ svn co https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p5

       2-3. 기존의 받은 SVN 소스를 업데이트 하고자 할 경우
     ]$ cd lmc-1.4.0.b0-p4                                          SVN을 통해 받은 기존의 소스코드 위치로 이동
     ]$ svn ci -m "현재 개발한 내용 저장"                    SVN에 지금까지 수정한 내용 저장
     ]$ svn merge https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p5 .   수정반영

    인터럽트 실습을 위해 LMC는 다음과 같이 패치됩니다. (lmc-1.4.0.b0-p4)

    게시자: 허대영, 2014. 11. 24. 오후 11:39   [ 2014. 11. 25. 오전 6:57에 업데이트됨 ]

    1. 기존의 인터럽트는 수업 진행하는 데 있어, 다른 것과 혼동할 수 있는 우려가 있어 다음과 같이 수정합니다.
       인터럽트 호출시 시스템 스택에 쌓는 레지스터의 순서 변경
         SP, PC, PSW --> SP, PSW, PC 순으로 변경됩니다.
       교재 320 페이지 그림에서 아래쪽의 그림에서 PSW/PC/SP 로 된 그림을 PC/PSW/SP로 변경하여 이해하면 됩니다.

    2. 멀티스레드 개념을 실습할 수 있도록 타이머 장치를 추가하였습니다.
       타이머는 별도의 설정을 하지 않아도 되며, 부팅 후 롬부트로더에 의해서 활성화 됩니다.
       타이머의 기본설정은 503 틱입니다. 각 틱은 하나의 인스트럭션을 실행하는 것을 의미합니다.

       타이머는 Interrupt 8번으로 요청이 들어옵니다. 교재 322~325의 인터럽트 핸들러에서 X==8일때를 처리하면, 멀티스레드와 관련된 실습을 진행할 수 있습니다.
       이와 관련된 실습 자료는 향후 제공될 수 있습니다.

    3. 소스코드를 업데이트 해야 합니다.
       소소코드는 2가지 방식으로 릴리즈 됩니다.

       3-1. 압축해제
     ]$ tar xvzf /opt/lmc-1.4.0.b0-p4.tar.gz

       3-2. SVN을 통한 릴리즈 (다시 받기)
     ]$ svn co https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p4

       3-3. 기존의 받은 SVN 소스를 업데이트 하고자 할 경우
     ]$ cd lmc-1.4.0.b0-p2                                          SVN을 통해 받은 기존의 소스코드 위치로 이동
     ]$ svn ci -m "현재 개발한 내용 저장"                    SVN에 지금까지 수정한 내용 저장
     ]$ svn merge https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/tags/lmc-1.4.0.b0-p4 .   수정반영

    LMC Monitor의 MKBOOT 명령 오류

    게시자: 허대영, 2014. 11. 16. 오후 4:55   [ 2014. 11. 16. 오후 6:23에 업데이트됨 ]

    MKBOOT는 다음과 같은 문법으로 실행해야 합니다.

    Monitor> MKBOOT  <부팅카세트번호> M <프로그램이름> <시작주소> <끝주소>

    예를 들어 다음과 같이 실행할 수 있습니다.

    Monitor> MKBOOT 30 M hello 1000 1050

    위의 의미는 현재 메모리에 있는 0~99번지의 내용을 부트스트랩로더로 정하여 30번 카세트에 그대로 복사한 후, 메모리 1000~1050번지에 저장된 프로그램을 hello란 이름으로 30번 카세트에 이어서 BL 포맷으로 저장하는 명령입니다.
    이때 hello는 카세트 이름과 상관이 없고, BL 포맷에서 헤더 레코드에 지정할 프로그램 이름이 됩니다. 또한 BL포맷의 헤더 레코드는 프로그램 이름을 10자로 제한하고 있음을 상기해야 합니다.

    하지만, 현재 배포된 LMC 프로그램에서 테이프장치에 출력을 할 경우, 화면에 출력하도록하는 버그가 있습니다. 이 버그를 수정하려면 SVN을 통해서 다음과 같이 업데이트하세요.

    우선 lmc 디렉토리로 이동합니다.

    ]$ ls
    lmc-1.4.0.b0-p2

    ]$ cd lmc-1.4.0.b0-p2

    ls 명령을 통해서 현재 디렉토리에 mainboard/가 있는지 확인합니다.

    ]$ ls
    .... mainboard/ ....

    다음의 svn 명령을 통해서 최신 메인보드의 테이프 장치를 업데이트합니다.

    ]$ svn merge https://linux.cs.kookmin.ac.kr/lecturesvn/lmc/trunk/mainboard/tape.c mainboard/tape.c
    ...
    --- 병합중: r127에서 r131까지 'mainboard/tape.c'에 병합:
    U    mainboard/tape.c

    위와 같은 메시지가 나타나면 성공입니다.

    주의: 띄어쓰기 및 콜론(:),슬래쉬(/),마침표(.) 등의 철자를 잘 입력하세요.

    1-10 of 23