브랜치별로 학부과정 중 했던 개인 과제를 정리하는 레포지토리입니다.
yacc를 이용, 유사 C언어 컴파일러 제작 소스로, 신택스 분석기, 시멘틱 분석기를 제작하고 코드 생성기를 통해 C언어 소스 코드를 파싱하고 기계어 코드를 생성합니다.
유닉스/리눅스 환경에서 특정 디렉토리 아래 파일의 변경 상태를 모니터링하여 로깅합니다.
이외 기능은 다음과 같습니다:
- DELETE [FILENAME] [END_TIME] [OPTION]
- 지정한 삭제 시간(END_TIME)에 자동으로 파일을 삭제합니다.
- FILENAME은 상대경로, 절대경로 모두 가능합니다.
- 옵션을 통해 trash 디렉토리로 이동하지 않고 바로 파일을 삭제하거나, 삭제시 삭제 여부를 재확인할 수 있습니다.
- SIZE [FILENAME] [OPTION]
- FILENAME의 파일 크기를 출력합니다.
- 문자열 오름차순으로 출력되며, 경로는 상대경로로 출력됩니다.
- 옵션을 통해 깊이 d 만큼의 하위 디렉토리까지 출력할 수 있습니다.
- RECOVER [FILENAME] [OPTION]
- trash 디렉토리 안의 파일을 원래 경로로 복구합니다.
- 동일한 이름의 파일이 trash 안에 있을 경우, 사용자 선택을 하며 복구시 중복될 경우 앞에 숫자를 추가합니다.
- 옵션을 통해 삭제 시간이 오래된 순으로 출력후 진행 할 수 있습니다.
- TREE
- 모니터링 중인 디렉토리를 tree 형태 그림으로 출력해 보여줍니다.
- EXIT
- 프로그램을 종료시킵니다.
- HELP
- 프로그램 사용법을 출력합니다.
리눅스 시스템 상에서 파일이나 디렉토리를 동기화하는 rsync와 주기적으로 실행하고자 하는 명령으를 등록하고 실행하는 crontab을 구현합니다.
- crontab
- ssu_crontab_file에 명령어를 저장 및 삭제합니다.
- ssu_crond 프로세스가 상주해 주기적으로 실행시킵니다.
- 명령어가 정상적으로 실행된다면 ssu_crontab_log에 로깅합니다.
- ssu_crontab_log에는 명령어가 추가, 제거될 때에도 로깅됩니다.
- rsync
- src 디렉토리(및 파일)와 dst 디렉토리를 동기화합니다.
- 옵션을 통해 서브디렉토리를 포함할 수 있고, dst 디렉토리는 src에 존재하지 않는 디렉토리나 파일을 삭제할 수도 있습니다. 그리고 tar로 묶어 동기화 또한 가능합니다.
- xv6 환경을 세팅하고, 관련 작업을 합니다.
- 새 시스템 콜 추가 및 새 시스템 콜을 테스트하는 프로그램 구현
- 간단한 문구 출력: hello(), hello_name()
- 프로세스 정보를 출력하는 시스템 콜: get_num_proc(), get_max_pid(), get_proc_info()
- 스케쥴러를 위한 시스템 콜: set_prio(), get_prio()
- 우선순위 기반 RR 스케쥴러 구현
- 기본 RR 스케쥴러에서 추가한 시스템 콜을 기반으로 하는 우선순위 기반 RR 스케쥴러를 구현
- 새로운 스케쥴러 테스트 및 검증
- 새 시스템 콜 추가 및 새 시스템 콜을 테스트하는 프로그램 구현
- 다중 스레드 관련 프로그램을 구현합니다.
- master-worker 스레드 풀을 구현합니다.
- 마스터 스레드가 숫자를 생산하고, 워크 스레드가 정확히 한 번 소비합니다.
- reader-writer locks 스레드 구현 -read/write lock을 정의, 구현하고 구현한 내용을 테스트합니다.
- 사용자 수준 세마포어를 구현합니다.
- 커널 제공 세마포어와 충돌하지 않는 사용자 수준의 세마포어입니다.
- master-worker 스레드 풀을 구현합니다.
- 메모리를 동적으로 할당하는 사용자 지정 메모리 관리자를 구현합니다. (alloc.c)
- 메모리 구조를 정의해 구현합니다.
- 메모리 할당, 해제 함수를 구현합니다.
- 메모리를 관리하는 관리자를 구현합니다.
- 확장가능한 heap을 구현합니다. (elloc.c)
- 가상 디스크를 위한 파일 시스템과 그 기본 파일 동작을 구현합니다.
- 제공된 가상 디스크 에뮬레이션 코드를 해석하여 요구되는 기능을 구현합니다.
- 파일 생성
- 파일 삭제 (존재하는 경우에만)
- 파일 열기
- 파일 닫기
- 파일 n바이트 읽기
- 파일 n바이트 쓰기
- 파일 오프셋 증가
- 제공된 가상 디스크 에뮬레이션 코드를 해석하여 요구되는 기능을 구현합니다.