System Programming

By Suntae Hwang

Fall Semester

Notice

    LMC 버그 픽스: 1.4.0.b0-p13

    게시자: 허대영, 2017. 11. 12. 오후 8:35   [ 2017. 11. 13. 오전 2:51에 업데이트됨 ]

    LMC의 다음의 오류가 수정되었습니다.

    버그 리포트 내용:

    - [해결됨] LMC 디버거 사용시 에러가 발생함.
     원인: 디버거에 포함된 디어셈블러에서 Immediate Addressing Mode를 문자열 치환시 에러가 발생함.


    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 .   수정반영

    1-10 of 24