리눅스 데브코스 [3주차 - 3]<주요 운영체제 개념>

심우열·2023년 4월 18일
0

1. 운영체제를 이해하기 위한 요소

1. 프로세스 관리

1. 프로세스 스케줄링

프로세스 스케쥴링의 목적: fairness, 컴퓨터 자원을 공평하게 사용

2. CFS(Complete Fair Scheduling)

일반 적인 프로세스 스케줄링 알고리즘

3. 실시간 스케줄링(RT, Real Time)

프로세스에 dead-line이 있는 경우 사용되는 프로세스 스케줄링 알고리즘, dead-line에 따라 우선순위 결정

4. 프로세스 라이프 사이클

프로세스가 생성되고 삭제되는 방법

  1. 리눅스의 프로세스는 전부 1개의 조상에서 시작됨 -> init 프로세스(현대는 systemd)
  2. 프로세스는 생성되기 위해 부모 프로세스로부터 탄생권을 얻어야 함
  3. fork(): 프로세스 생성될때 사용되는 시스템 콜
  4. 자식 프로세스의 실행이 끝나면 부모 프로세스가 자식 프로세스를 메모리에서 지움

5. 프로세스의 실체

프로세스 VS. 쓰레드

프로세스 : 하나의 APP을 실행하기 위한 단위
쓰레드 : 프로세스보다 크기가 작은 실행 단위, 하나의 프로세스 안에 몇가지 일을 나눠서 서로 병렬적으로 실행할때 주로 사용함

6. 프로세스간 통신(IPC, Inter-Process Communication)

2. 메모리 관리

1. 가상메모리(가상주소 VS. 물리주소)

왜 가상주소를 사용하는지?

  1. 물리 메모리는 크기가 제한됨
    2.실제 물리 메모리보다 크기가 큰 가상의 메모리를 만들고, 가상 메모리의 주소를 물리 메모리의 주소에 맵핑
  2. 가상 메모리와 물리 메모리의 주소 맵핑 정보를 담고 있는 테이블을 두고 사용됨

2. SWAP 메모리

디스크의 일부분(SWAP Space)를 메모리처럼 사용

3. 페이지, 페이징

페이지란?

  1. 물리 메모리는 칸으로 나누어져서, 서로 다른 칸 간에 엑세스 불가능 하게 함, 메모리 access 시 칸 단위로 함
  2. 이러한 칸의 단위를 페이지 라고 함, 보통 4k(4000byte)

페이징이란?

  1. 페이지 단위로 메모리 access를 하는 운용을 페이징이라고 함

4. 요구 페이징(Demand Paging)

필요로 하는 페이지가 메인 메모리에 없을 경우, 하위 스토리지에서 페이지를 가져오는 것

5. 페이지 폴트

6. 페이지 테이블

7. TLB

3. 파일시스템

1. 압축 파일 시스템

2. 플래시 메모리

플래시 메모리는 무엇이 다른가?

  1. 플래시 메모리는 read 속도 빠르나, write 속도 느림
  2. 하나의 데이터가 변경될 경우, 수정할 데이터를 다른 위치에 쓴 다음 원래의 위치에 맵핑해줌
  3. 이전의 데이터는 특정 시점에 한번에 삭제됨
  4. 이러한 특성때문에 write 속도가 느림, 따라서 다른 파일시스템이 필요함 -> 저널링 파일 시스템

3. 저널링 파일 시스템

  1. 데이터의 변경에 대한 동작을 모두 저장해두고, 해당 데이터에 접근시 최신 데이터를 반환
  2. 공간이 모자를 경우 이전의 데이터 삭제

4. 버퍼 캐시

CPU에서 메모리의 어떤 데이터를 수정하였을 경우, 이를 하위 스토리지에도 적용하기 위해서 변경 된 사항을 담아두는데 사용되는 버퍼 캐시

Replacement Algorithm(LRU)

  1. 메모리가 가득 차거나 내용을 바꿔주어야 하는 경우, 어떤 데이터를 변경할지 선택하는 알고리즘
  2. 가장 최적화되었다고 알려진 알고리즘 -> LRU(Least Recently Used)

5. 마운트

6. proc 파일 시스템

7. 디바이스 노드

4. 디바이스 드라이버

1. 디바이스 드라이버의 개념

  1. 하드웨어를 접근하는 채널
  2. 하드웨어 제어는 시스템콜을 활용 : 각 하드웨어 제어를 위한 시스템콜 구현

2. 디바이스 드라이버의 종류

문자 디바이스 드라이버

일반적인 장치에 대한 디바이스 드라이버

블록 디바이스 드라이버

파일 시스템 접근을 위한 디바이스 드라이버

3. 디바이스 드라이버를 작성한다는 것

  1. 디바이스의 초기화 코드 작성
  2. 디바이스 인터럽트 처리 부분 작성
  3. 디바이스 접근을 위한 다양한 시스템콜의 내용 작성

4. 디바이스 접근 예

Int fdl
fd = open("dev/ttyS0", O_RDWR);
write(fd, "Hello", 5);
close(fd);
  1. 모든 디바이스는 파일 형태로 접근
  2. open()을 통해 획득한 fd를 통해 다양한 시스템콜을 호출하여 다바이스 제어
  3. 필요한 작업을 끝낸 후에는 close() 호출

5. 가상화 기술, 리눅스 컨테이너, Docker

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글