본문 바로가기

CS/운영체제18

18. 상호배제 구현 방법 먼저, 해당 포스팅은 단일 프로세서 상호배제 구현 방법인 것을 알고 있어야 한다.인터럽트 서비스 금지 방법 진입 코드(Entry Code)에서 cli(clear interrupt flag) 명령으로 인터럽트 서비스를 중지하고임계 구역(Critical Code)에서 인터럽트가 발생하면 무시한다.진출 코드(Exit Code)에서 sti(set interrupt flag) 명령으로 인터럽트 서비스를 재실행한다.  인터럽트 서비스를 중지하지 않을 경우, 그림2와 같이 T1이 임계구역을 접근했을 때, T1에게서 인터럽트 서비스가 발생하면 스레드는 대기 상태가 되고 T2를 스케줄한다. 이 때, T2가 임계 구역에 접근하게 된다면 공유 자원에 T1과 T2가 공존하는 현상이 발생한다. 즉 T1이 변수의 값을 읽고 인터.. 2024. 6. 16.
17. 상호 배제 (Mutual Exclusion) 상호배제란? 앞서 스레드 동기화에서 언급된 임계구역과 상호배제는 스레드 동기화를 위한 중요한 개념이다.먼저, 임계 구역(Critical Section)은 각 스레드들이 동시에 접근할 수 있는 공유 데이터를 관리하는 구역이다.상호 배제는 먼저 임계 구역에 접근한 스레드가 임계 구역을 독점적으로 사용하여 스레드 간의 순서를 보장할 수 있는 개념이다. 임계 구역과 상호 배제도 조금 더 쉽게 생각해보자. 스레드 A는 횟집, 스레드 B는 매운탕 집이다. 스레드 A와 B는 수산도매에서 싱싱한 생선을 가져와야한다. 스레드 A와 B는 서로 경매가를 부르고 있는데 도매상이 "마지막으로 현재 경매가 보다 높은 가격을 먼저 제시한 사람에게 판매하겠습니다."라고 했다. 스레드 A와 B는 동시에 "100만 원!"을 외쳤다. 이.. 2024. 6. 15.
16. 스레드 동기화 (Thread Synchronization) 스레드 동기화란 뭘까? 스레드 동기화란 다수의 스레드가 하나의 자원에 동시에 접근할 때 발생할 수 있는 문제점을 해결할 수 있는 방법이다.다수의 스레드가 하나의 자원에 동시에 접근한다는게 무슨 말일까?스레드 동기화 이해하기  먼저, 컴퓨터의 구조를 잘 알고 있어야한다.논리회로, 컴퓨터 구조, 운영체제 앞 단원을 열심히 공부했다면 쉽게 이해할 수 있는 부분이다. 이해를 해보자.컴퓨터는 클럭 단위로 동작한다.클럭 단위로 동작한다는 것은 하나의 작업을 수행할 때, 일정 시간이 소요된다는 의미이다. TEMP = 10 이 있을 때, 하나의 클럭이 소요되는데 0.001초라고 해보자.  스레드 A와 B가 TEMP에 입력한 값을 더하려고 한다. 1. 0초에 스레드 A는 TEMP의 값을 확인한다. 값은 10이다. 5를 .. 2024. 6. 15.
15. CPU Scheduling Algorithm FCFS (First Come First Served) 스케쥴링 선입선처리 알고리즘 스케줄링 파라미터 : 스레드별 도착 시간 비선점 스케쥴링 스레드 우선순위 없음 기아 없음, 스레드 오류로 무한 루프가 발생한다면 기아 발생 처리율이 낮음. 호위 효과 (convoy effcet) 발, 긴스레드가 오래 CPU를 차지하면 늦게 들어온 스레드는 오래 대기 총 처리 시간 11s, 대기시간 11s, 평균 대기시간 11 / 4 = 2.75ms SJF (Shortest Job First) 최단 작업 우선 스케줄링 스케줄링 파라미터 : 스레드 별 예상 실행 시간 비선점 스케줄링 스레드 우선순위 : 짧은 스레드 실행 시간 기아 발생가능, 지속적으로 짧은 스레드가 도착시 긴 스레드의 실행을 예측 불가 짧은 스레드가 먼저 실.. 2024. 4. 22.
14. CPU Scheduling CPU 스케줄링은 왜 생겼을까? 운영체제의 발전을 공부하면서 다중프로그래밍이 도입된 것을 알게됐다. 다중 프로그래밍은 I/O 처리로 인한 CPU Idle Time을 줄여서 CPU 활용률을 향상 시키기 위해서 도입 되었는데 이 때, 다중 처리를 하기 위한 기법이 CPU 스케줄링이다. 스레드까지 공부하면서 알게 된 내용은 CPU는 스레드를 스케줄링해야 한다는 것이다. 근데 어떤 스레드를 선택할 것인지 골라야한다. 위와 같은 정책을 가진 알고리즘을 크게 CPU 스케줄링 알고리즘이라고 하고 엄밀하게는 스레드 스케줄링이라고 한다. 다중 프로그래밍은 2가지 스케줄링을 통해 발생한다. 1. 작업 스케줄링(job scheduling) - 디스크 장치로부터 메모리에 올릴 작업을 선택하는 것이다. 프로세스가 시작하거나 종.. 2024. 4. 22.
13. 멀티스레드 구현 멀티 스레드 구현 ? 개발자로 거듭나려면 꼭 필요한 개념이다. 우리도 코드를 작성하면서 다양한 사용자에 대해 작업을 해야할 것이다. 그 때, 스레드를 사용한다면 우리가 만든 스레드가 시스템에서 스케줄 될 수 있도록 하는 방법이다. 크게 N:1 매핑, 1:1 매핑, N:M 매핑이 있다. X : Y 꼴로, X개의 사용자 레벨 스레드를 Y개의 커널 레벨 스레드로 매핑한다는 내용인데 이 외에도 1:N 매핑도 있다. 하지만 중요한 N:1, 1:1 만 작성하도록 하겠다 .N(User):1(Kernel) 매핑 말 그대로 N개의 사용자 스레드가 1개의 커널 스레드로 매핑하는 개념이다. 운영체제(커널 입장)는 모든 프로세스를 Main 스레드라는 단일 프로세스로 처리한다. 이 말은 커널 영역에 저장되는 커널 레벨 스레드의.. 2024. 4. 22.
12. 커널 레벨 스레드와 사용자 레벨 스레드 스레드의 레벨? 스레드는 스케줄링 주체에 따라 두 종류의 스레드로 구분된다. 1. 커널 레벨 스레드 (Kernal-Level Thread) : 커널에 의해 스케줄링 된다. 2. 사용자 레벨 스레드 (User-Level Thread) : 스레드 라이브러리에 의해 스케줄링 된다. TCB를 소유하고 있는 주체에 따라 두 종류의 스레드로 구분되는데 자세히 알아보도록 하겠다. 커널 레벨 스레드 커널 레벨 스레드는 시스템 호출을 통해서만 생성된다. 즉, 커널에 의해서만 스케줄링 되는 것이다. 하지만, 커널 코드와 달리 커널 레벨 스레드의 코드나 데이터가 커널 공간뿐 아니라 사용자 공간에도 있을 수 있다. 이게 무슨말인지 정말 헷갈렸다. thread_create() 뿐만 아니라 ktread_create()라는 스레드.. 2024. 4. 22.
11. 스레드 주소 공간과 컨텍스트 스레드의 주소공간은 생각보다 간단하다. 프로세스 주소공간을 그대로 나누어가지고 있다. 기존 프로세스의 코드, 데이터, 힙, 스택 영역은 공유 영역이되고 개별 스레드마다 코드 영역, 데이터 영역, 스택 영역, 커널 영역으로 나누어 사용되고 있다. ※ 프로세스와 스레드는 유사하다는 것을 알 수 있다. 스레드 생명 주기 프로세스에서 스레드로 바뀌었으니 유사한 것은 당연하다. 그럼 프로세스에서 있는 개념들은 웬만하면 스레드에도 적용된다는 것을 알 것이다. 스레드 또한 생명주기가 있다. 프로세스는 NEW, Ready, Running, Blocked, Zombie, Out 상태가 있었다. 스레드는 Ready, Running, Blocked, Terminated 상태가 있다. 각 상태에 대한 기본적이 내용은 프로세스.. 2024. 4. 22.
10. 스레드 (Thread) 쓰레드는 왜 사용할까? 스레드를 사용하게 된 배경도 있을 것이다. 이유는 프로세스의 문제점 때문이다. 프로세스에서 컨텍스트 스위칭이 발생할 경우, 프로세스 생성에 너무 많은 오버헤드가 발생한다 프로세스 생성시 PCB 생성, 메모리 할당, 부모 프로세스 내용 복사 등 많은 작업을 해야한다. 그 외에도 뒤에 나올 페이지 테이블 참조, 캐시 업데이트 등 많은 부분에서 문제점이 발생 프로세스 간의 통신이 어렵다. 프로세스는 독립적인 공간을 갖고 있으므로 서로 침범할 수 없어서 통신이 힘들다는 점. 프로세스 간 통신을 위해 메모리 맵, 파이프, 소켓 등 다양한 방식을 사용했다. 프로세스는 입력을 독점하는 ForeGorund Process와 각종 처리를 하는 BackGround Process가 존재한다. 그 외에도.. 2024. 4. 21.