kangchanguk / study

0 stars 0 forks source link

운영체제 #10

Open kangchanguk opened 5 months ago

kangchanguk commented 5 months ago

운영체제 스터디

kangchanguk commented 5 months ago

Process

운영체제는 이 명령어와 데이터 묶음을 읽고 실행하여 프로그램에 생명을 불어 넣는것!!

시분할

프로세스의 개념

프로세스 API

1) 생성

운영체제는 새로운 프로세스를 생성할 수 있는 방법을 제공

2) Destory

운영체제는 강제로 프로세스를 제거할 수 있는 인터페이스를 제공

3) Wait

때로는 어떤 프로세스의 실행 중지를 기다릴 필요가 있기 때문에 대기 인터페이스가 필요

4) 각종 제어

프로세스의 일시 정지 등 각종 제어 기능 제공

5) 상태

프로세스 상태 정보를 제공하는 인터페이스 제공

프로세스 생성

어떻게 프로그램이 프로세스로 변형이 되는가??

1) 프로그램 코드와 정적 데이터를 메모리, 프로세스 주소 공간에 탑재

2) 스택과 힙을 할당

3) 입출력과 관계된 초기화 작업을 진행

4) main()에서부터 프로그램 실행을 시작

프로세스 상태

자료구조

kangchanguk commented 5 months ago

process API

unix 시스템의 프로세스 생성에 관해 논의 프로세스 생성을 위해 fork()와 exec() 시스템 콜을 사용

fork ()

wait()

exec()

실행 순서

왜 이렇게 인터페이스 분리해둠??

여타 api

kill ()

kangchanguk commented 5 months ago

CPU scheduling

고려사항

제한적 직접 실행이라는 방법이 나옴!!

기본 원리

운영체제)

해당 방식을 사용할 경우 하기와 같은 문제를 일으킴

1) 프로그램을 직접 실행시키면 프로그램이, 운영체제가 원하지 않을 일을 하지 않는다는 것을 어떻게 보장할 것인가? 2) 프로세스 실행 시, 운영체제는 어떻게 프로그램의 실행을 중단하고 다른 프로세스로 전환시킬 수 있는가??

이러한 문제점들을 개선하는 과정에서 제한적이라는 개념이 도입됨

문제점 1) 제한된 연산

프로세스는 입출력 연산을 비론한 다른 제한된 연산을 수행해야 함

하드웨어는 두가지 실행모드를 제공하여 운영체제를 도움

6.3 문제점 2: 프로세스 간 전환

직접 실행의 두 번째 문제는 프로제스의 전환이다.

문맥의 저장과 복원

6.4 병행실행으로 인한 문제

kangchanguk commented 5 months ago

cpu 스케줄링

스케줄링 정책 개발을 위해서는 하기의 의문점들을 정의해야한다.

워크로드

  1. 모든 작업은 같은 시간 동안 실행된다.
  2. 모든 작업은 동시에 도착한다.
  3. 각 작업은 시작되면 완료될 때까지 실행된다.
  4. 모든 작업은 CPU만 사용한다 (즉, 입출력을 수행하지 않는다).

평가 기준

1) 선입선출

2) 최단 작업 우선(SJF)

3) 최소 잔여시간 우선(STCF)

새로운 평가기준: 응답 시간

라운드 로빈

kangchanguk commented 5 months ago

multi level feedback queue

mifq

규칙

mifq는 주어진 프로세스가 짧은 작업이라고 가정하여 높은 우선순위를 부여하고 짧은 작업이 아니라면 천천히 우선순위를 떨어뜨린다.

mifq의 문제점

1) 기아상태 발생: 시스템에 너무 많은 대화형 작업이 존재하면 모든 CPU 시간을 소모하게 될 것 이고 긴 실행 시간 작업은 CPU 시간을 할당 받지 못함

2) 자신에게 유리하도록 프로그램 작성이 가능: 타임슬라이스를 99%까지 사용하고 CPU를 양도한다면 우선순위 유지가 가능 3) CPU 위주 작업이 대화형 작업으로 바뀜

해결책

1) 일정 시간이 지나면 시스템의 모든 작업을 최상위 큐로 이동

2) 더 나은 시간 측정 (스케줄러를 자신에게 유리하도록 동작시키는 것 방지)

kangchanguk commented 5 months ago

스케줄링 비례배분

기본 개념

추첨 기법

1) 추첨권 화폐

2) 추첨권 양도

3) 추첨권 팽창

추첨권 배분 방식

장점

단점

보폭 스케줄링

단점: cpu 사용현황이나 pass 값을 유지하고 갱신해야한다.

kangchanguk commented 5 months ago

주소 공간의 개념

초기 시스템

멀티프로그래밍과 시분할

해당 방식은 느림, 메모리가 커지면 어케할겨.... 프로세스 전환 시 프로세스를 메모리에 그대로 유지하면서, 운영체제가 시분할 시스템을 효율적으로 구현할 수 있게 해주는 것이 중요!!

주소공간

스택과 heap은 확장을 위해 주소공간 양 끝단에 위치

운영체제는 물리 메모리를 공유하는 다수의 프로세스에게 어떻게 프로세스 전용의 커다란 주소공간이라는 개념을 제공할 수 있는가??

가상화의 목표

kangchanguk commented 5 months ago

메모리 API

메모리 공간의 종류

void func() {
    int x;
}

스택

heap

1) malloc

2) free

3) 흔한 오류

1) 메모리 할당 잊기 2) 메모리 부족하게 할당받기(버퍼 오버플로우) 발생

4) 할당받은 메모리 초기화 하지 않기

5) 메모리 해제하지 않기

프로세스 종료 시 메모리 누수가 일어나지 않는 이유

6) 메모리 사용이 끝나기 전에 메모리 해제하기

반복적으로 매모리 해제

잘못 free

realloc

calloc

kangchanguk commented 5 months ago

멀티프로세서 스케줄링(고급)

여러 CPU에 작업을 어떻게 스케줄 해야하는가??

멀티 프로세서 구조

스크린샷 2024-05-18 오후 7 36 53

캐시 일관성 문제 해결책

동기화를 잊지 마라

캐시친화성 문제 발생

단일 큐 스케줄링

단점

1) 확장성 결여: 다수의 CPU에서 제대로 동작하기 위해 락을 삽입하지만 락이 성능 저하를 초래

2) 캐시 친화성 문제: 캐시 친화성 방지를 위해 되도록 하나의 CPU에서 프로세스가 실행되도록 함(구현과 기법이 복잡)

멀티 큐 스케줄링

장점

단점

해결책



kangchanguk commented 4 months ago

주소변환의 원리

사례

void func()
    int x = 3000;
    x = x + 3;

컴파일러가 변환한 어셈블리 코드

128 : movl 0x0 (\%ebx), \%eax;
132 : addl \$0x03, \%eax;
136 : movl \%eax, 0x0(\%ebx);

동적(하드웨어 기반) 재배치

베이스 레지스터

바운드 레지스터

한 쌍의 레지스터를 가지고 주소 변환에 도움을 주는 프로세서의 일부를 메모리 관리 장치(MMU)라고 함

스크린샷 2024-05-19 오전 10 13 53

운영체제 이슈

베이스 바운드 방식의 가상 메모리 구현을 위해서 운영체제가 반드시 개입되어야하는 중요한 세개의 시점이 존재

1) 프로세스가 생성될 때 운영체제는 주소 공간이 저장될 메모리 공간을 찾아 조치를 취해야 함

2) 프로세스가 종료할 때, 정상적으로 종료될 때 또는 잘못된 행동을 하여 강제적으로 죽게 될 때 프로세스가 사용하던 메모리를 회수하여 다른 프로세스나 운영체제가 사용할 수 있게 해야함

3) 운영체제는 프로세스 전환 시 베이스와 바운드 쌍을 저장하고 복원해야 한다.

4) 예외 핸들러 또는 호출될 함수를 제공해야한다.

프로세스 가상메모리공간 전체를 연속적으로 물리 메모리에 탑재 하게 됨으로서 프로세스의 힙과 스택 사이의 공간이 낭비되는 현상이 발생한다. 이를 해결하기 위해 세그멘테이션(segmentation)이라는 일반화된 base-bound 기법이 등장하게 된다.

kangchanguk commented 4 months ago

페이징

세그멘테이션의 한계

페이징의 간단한 예시

스크린샷 2024-05-23 오후 5 35 26

위의 그림과 같이 64바이트의 작은 주소 공간을 16바이트짜리 페이지 4개로 나눌수 있고 이를 물리 메모리의 페이지 프레임에 탑재 한것을 볼 수 있음.(물리 메모리의 페이지 프레임 또한 16바이트)

페이징 장점

1. 유연성

2. 빈공간 관리의 단순화

주소 공간의 각 가상 페이지에 대한 물리 메모리의 위치를 기록하기 위해서 운영체제는 각 프로세스마다 페이지 테이블이라는 자료구조를 가지고 있다. 페이지 테이블의 주요 역할은 주소 변환이다.

페이징 기법의 주소 변환 방법

예시

스크린샷 2024-05-23 오후 5 37 41

64바이트의 가상주소로 가정 하였으므로 6비트가 필요하고 각 페이지의 크기를 16바이트로하고 총 4개로 나눴기 때문에 2개의 비트로 VPN을 나타낼 수 있다.

가상 주소 21을 변환해 보면 아래와 같다.

페이지 테이블을 가지고 가상 페이지가 어떤 물리 페이지 프레임에 저장되어 있는지 찾아 낼수 있고 offset을 통해 해당 물리 페이지 프레임에서 얼만큼 떨어져 있는지도 알아낼 수 있기 때문에 주소 변환이 가능해 진다.

스크린샷 2024-05-23 오후 5 38 33

페이지 테이블은 어디에 저장될까?

실제 32비트 주소 공간에서 4KB의 페이지를 사용한다고 하였을 때의 경우에 대해서 가상 주소 공간을 아래와 같이 나눔

-페이지 테이블의 크기가 크기 때문에 이를 MMU안에 유지할 수 없고 운영체제의 가상메모리에 저장된다.

페이지 테이블 안에는 실제 무엇이 있을까?

우선 페이지 테이블이 VPN을 인덱스로 하는 단순한 배열 자료 구조(선형 페이지 테이블)라고 가정하고 생각을 할 수 있다. 이는 이후에 페이징의 문제를 해결하기 위해 고급 자료 구조로 변환된다. VPN 인덱스에 접근하면 PTE에 저장된 정보를 확인 할 수 있음

페이징은 느리다?

페이징 단점

kangchanguk commented 4 months ago

세그멘테이션

동적 재배치의 한계

베이스 바운드의 일반화

세그멘트 종류 파악

스크린샷 2024-05-23 오후 5 27 50

스택

공유지원

한계

kangchanguk commented 4 months ago

TLB

페이징의 한계

TLB 란?

TLB 기본 알고리즘

  1. 가상 주소로 부터 가상 페이지 번호를 추출한다.
  2. 해당 가상 페이지 번호가 TLB에 들어있는지 확인한다.
  3. 만약 TLB에 들어있다면 TLB에 들어있는 정보 기반으로 물리 주소 계산해서 접근
  4. 만약 TLB에 들어있지 않다면 페이지 테이블에 접근하여 주소변환에 필요한 정보를 TLB에 갱신하고 해당 명령어를 재실행

TLB 미스 처리의 주체

하드웨어

소프트웨어

TLB 구성

TLB의 추가적인 정보들

문맥 교환 시 TLB 교체

Valid Bit을 0으로 만들어 TLB를 비우기

주소 공간 식별자(address space identifier, ASID)를 추가

TLB 교체 정책

kangchanguk commented 4 months ago

페이징( 더 작은 테이블 )

1) 더 큰 페이지

2) 하이브리드(페이징과 세그먼트)

스크린샷 2024-06-02 오전 11 39 31

스크린샷 2024-06-02 오전 11 52 05

BUT!!! 세그멘테이션의 고질적인 문제점인 유연함 부족은 해결하지 못함

멀티레벨 페이지 테이블

1) Page Directory 에는 PDE가 존재한다. 이 PDE의 PFN의 값으로 접근하면 Page Table(페이지 테이블)이 나온다. 2)Page Table(페이지 테이블)에는 PTE가 존재한다. 이 PTE의 PFN 값으로 접근하면 찾고자 하는 주소의 PFN(Page frame number)이 나온다. 3) 얻어낸 PFN과 OFFSET을 결합시켜 최종 주소를 얻어낸다.

장점

1) 주소공간의 크기에 비례하여 페이지 테이블 공간이 할당 2) 페이지 테이블을 페이지 크기로 분할함으로써 메모리 관리에 용이

단점

kangchanguk commented 4 months ago

swap mechanisms

큰 주소 공간을 제공하면 좋은 점

스왑 공간

페이지 스왑을 위한 기능

present bit

page fault

페이지 fault 작동 방식

1) 페이지 폴트 발생: 프로세스가 메모리에 접근하려 할 때, 해당 가상 주소에 대응하는 페이지가 물리적 메모리에 없으면 페이지 폴트가 발생

2) 인터럽트 처리: 페이지 폴트는 운영 체제에 의해 처리되는 인터럽트, 운영 체제는 이 인터럽트를 받고 현재 CPU의 상태를 저장한 후 페이지 폴트 처리 루틴을 실행

3) 페이지 로딩: 운영 체제는 필요한 페이지를 찾아 물리적 메모리로 로드, 이 페이지는 디스크의 스왑 영역이나 해당 파일 시스템에서 가져올 수 있습니다.

4) 페이지 테이블 업데이트: 페이지가 메모리에 로드된 후, 페이지 테이블이 업데이트되어 새로운 매핑 정보를 반영

5) 프로세스 재개: 페이지 로딩이 완료되면, CPU는 원래의 프로세스를 재개

메모리에 빈공간이 없을 경우