프로세스 스케쥴링의 목적: fairness, 컴퓨터 자원을 공평하게 사용
일반 적인 프로세스 스케줄링 알고리즘
프로세스에 dead-line이 있는 경우 사용되는 프로세스 스케줄링 알고리즘, dead-line에 따라 우선순위 결정
프로세스가 생성되고 삭제되는 방법
- 리눅스의 프로세스는 전부 1개의 조상에서 시작됨 -> init 프로세스(현대는 systemd)
- 프로세스는 생성되기 위해 부모 프로세스로부터 탄생권을 얻어야 함
- fork(): 프로세스 생성될때 사용되는 시스템 콜
- 자식 프로세스의 실행이 끝나면 부모 프로세스가 자식 프로세스를 메모리에서 지움
프로세스 VS. 쓰레드
프로세스 : 하나의 APP을 실행하기 위한 단위
쓰레드 : 프로세스보다 크기가 작은 실행 단위, 하나의 프로세스 안에 몇가지 일을 나눠서 서로 병렬적으로 실행할때 주로 사용함
왜 가상주소를 사용하는지?
- 물리 메모리는 크기가 제한됨
2.실제 물리 메모리보다 크기가 큰 가상의 메모리를 만들고, 가상 메모리의 주소를 물리 메모리의 주소에 맵핑- 가상 메모리와 물리 메모리의 주소 맵핑 정보를 담고 있는 테이블을 두고 사용됨
디스크의 일부분(SWAP Space)를 메모리처럼 사용
페이지란?
- 물리 메모리는 칸으로 나누어져서, 서로 다른 칸 간에 엑세스 불가능 하게 함, 메모리 access 시 칸 단위로 함
- 이러한 칸의 단위를 페이지 라고 함, 보통 4k(4000byte)
페이징이란?
- 페이지 단위로 메모리 access를 하는 운용을 페이징이라고 함
필요로 하는 페이지가 메인 메모리에 없을 경우, 하위 스토리지에서 페이지를 가져오는 것
플래시 메모리는 무엇이 다른가?
- 플래시 메모리는 read 속도 빠르나, write 속도 느림
- 하나의 데이터가 변경될 경우, 수정할 데이터를 다른 위치에 쓴 다음 원래의 위치에 맵핑해줌
- 이전의 데이터는 특정 시점에 한번에 삭제됨
- 이러한 특성때문에 write 속도가 느림, 따라서 다른 파일시스템이 필요함 -> 저널링 파일 시스템
- 데이터의 변경에 대한 동작을 모두 저장해두고, 해당 데이터에 접근시 최신 데이터를 반환
- 공간이 모자를 경우 이전의 데이터 삭제
CPU에서 메모리의 어떤 데이터를 수정하였을 경우, 이를 하위 스토리지에도 적용하기 위해서 변경 된 사항을 담아두는데 사용되는 버퍼 캐시
Replacement Algorithm(LRU)
- 메모리가 가득 차거나 내용을 바꿔주어야 하는 경우, 어떤 데이터를 변경할지 선택하는 알고리즘
- 가장 최적화되었다고 알려진 알고리즘 -> LRU(Least Recently Used)
- 하드웨어를 접근하는 채널
- 하드웨어 제어는 시스템콜을 활용 : 각 하드웨어 제어를 위한 시스템콜 구현
문자 디바이스 드라이버
일반적인 장치에 대한 디바이스 드라이버
블록 디바이스 드라이버
파일 시스템 접근을 위한 디바이스 드라이버
- 디바이스의 초기화 코드 작성
- 디바이스 인터럽트 처리 부분 작성
- 디바이스 접근을 위한 다양한 시스템콜의 내용 작성
Int fdl fd = open("dev/ttyS0", O_RDWR); write(fd, "Hello", 5); close(fd);
- 모든 디바이스는 파일 형태로 접근
- open()을 통해 획득한 fd를 통해 다양한 시스템콜을 호출하여 다바이스 제어
- 필요한 작업을 끝낸 후에는 close() 호출