CS/OS 9

Thread

스레드란 프로세스 내에 독립된 실행 흐름을 의미한다. 독립적으로 움직이기 때문에 독자적인 PC와 레지스터를 가지고 있다. 스레드는 프로세스 주소 공간을 공유한다. 같은 데이터를 공유하고 사용함으로써 Concurrency 문제가 발생할 수 있다.스레드에 대해 예를 들어 설명해 보겠다.상하차로 비유해 보겠다.화물차를 프로세스로 보고 사람을 스레드로 보자.화물차(프로세스) 안에는 여러 가지 물건(DATA)이 있다(주소 공간 공유). 화물차 안에서 사람(스레드)이 움직인다. 확실히 사람이 많으면 일이 빨리 끝날 거 같다.근데 사람이 너무 많으면 같은 물건을 집게 되는 문제가 발생할 수 있다(공간을 공유하기 때문에 발생!).우리는 사람이니까 같은 물건을 안 집으려고 생각하고 물건을 선택하지만 프로그램은 그렇지 않..

CS/OS 2025.01.24

Multiprocessor Scheduling

멀티프로세서는 한 시스템 내에 여러 개의 프로세서가 있는 것을 말한다.멀티코어는 하나의 칩 안에 여러 개의 코어가 있어 동시에 작업을 처리할 수 있다.우리가 흔히 사용하는 컴퓨터는 멀티코어를 사용하고 있다.멀티프로세서를 사용하지 않는 이유는 멀티코어가 공간, 전력 효율성 측면에서 좋기 때문이다.멀티프로세서를 사용하게 되면 CPU 간 메모리 공유와 통신 비용이 증가한다. 그냥 멀티코어를 사용하면 되는 거 아닌가?? 멀티프로세서는 언제 사용하면 좋을까?하나의 칩 안에 넣을 수 있는 core의 개수가 물리적으로 제한되어 있기 때문에 이를 극복하기 위해서는여러 개의 CPU가 필요한 것이다. 슈퍼컴퓨터나 대형 데이터센터처럼 수만 개의 작업을 병렬 처리해야 할 때는 어쩔 수 없이 멀티프로세서를 사용해야 만한다. 즉..

CS/OS 2025.01.23

Proportional share이란?

MLFQ는 반응성과 효율성은 뛰어난 스케줄링 방식이지만 공정성을 항상 보장하지는 않는다.예를 들면 I/O 작업을 자주 수행하는 작업에 우선순위를 부여하고 CPU를 길게 사용하는 Intensive 한 작업은 낮은 우선순위로 밀어낸다.CPU-Intensive 한 작업은 *기아상태*에 빠질 수 있다.특정 작업이 계속해서 높은 우선순위를 유지하면 다른 작업들이 CPU 사용 기회를 많이 얻지 못한다.MLFQ는 반응성을 중시하고 CPU시간을 균등하게 배분하지는 않는다. 공평하게 CPU시간을 사용하기 위해 Proportional share(비례 배분)을 사용한다.(긴급한 자원이나 비용을 많이 지불한 사용자에게 더 많은 자원을 할당해 준다.)   위 그림은 15번 뽑았을 때의 결과를 나타낸 표이다.A가 11번 B가 4..

CS/OS 2025.01.22

Multi-Level Feedback Queue란?

Multi-Level Feedback Queue는 우선순위가 다른 여러 개의 큐를 둬서 우선순위가 높은 큐 순서대로 작업을 실행시키고,같은 큐 내에서는 라운드 로빈 방식으로 작업을 실행시킨다.  기본적으로 작업이 들어오게 되면 가장 높은 우선순위 큐에 작업을 배치한다. 만약 작업이 타임 슬라이스를 모두 소모하면 우선순위를 감소시키고 타임 슬라이스를 다 사용하지 못하고 I/O를 하러 가면 동일한 우선순위를 유지한다.  이러한 MLFQ의 문제점은 I/O작업이 많은 시스템이라면 CPU-intensive 작업(데이터 처리, 시뮬레이션, 수학적 연산 등)을 실행하지 못할 수 있다.그리고 프로세스를 타임 슬라이스를 99프로 사용한 후 I/O를 요청하도록 코딩하면 CPU를 독점하는 상황이 발생한다. 이러한 기본적인 ..

CS/OS 2025.01.10

Scheduling이란?

운영체제는 CPU를 시간 단위로 스케줄링하여 여러 프로세스가 CPU를 사용할 수 있도록 한다. 스케줄링의 성능은 반환시간, CPU 이용률, 대기시간, 응답 시간 등으로 평가가 가능하다.   FIFO는 구현이 하기는 쉽지만 처음에 들어오는 작업의 수행 시간이 길다면 평균 반환 시간이 길어진다. SJF는 짧은 작업을 우선적으로 수행시킨다. 그런데 면약 작업들이 동시에 도착하지 않고 임의의 시간에 도착한다면 여전히 평균 반환 시간은 길어지게 된다. STCF는 SJF에서 선점 기능을 추가한 스케줄링이다.새로운 작업이 들어오면 실행 중인 작업의 남은 시간과 새로 들어온 작업의 실행 시간을 비교하고 작은 작업을 먼저 실행시킨다.(Context switch) 지금까지는 반환 시간을 중요하게 살펴봤다. 그런데 이 반환..

CS/OS 2025.01.09

제한적 직접 실행이란?

프로그램을 CPU에서 직접 실행시키면 성능은 빨라진다. 하지만 여러 가지 문제가 발생할 수 있다.예를 들어 CPU에서 직접 실행시키는 프로그램이 무한루프에 빠지게 된다면?? 권한 없이 하드웨어나 시스템 파일에 접근한다면?? 프로세스가 디스크에 I/O요구, 메모리 추가 할당 요구를 직접 수행하면 문제가 발생할 수 있다. User mode-사용자가 접근 가능한 제한된 기능만 수행 가능(파일 읽기, 쓰기) Kernel Mod-운영체제가 CPU 제어권을 가지는 특권모드-모든 동작을 할 수 있다. 기본적으로 CPU는 User Program을 실행한다. 이때 CPU는 User Mode에서 동작한다.User Mode에서 System Call(open(), read())을 하게 되면 CPU의 제어권이 운영체제로 넘어간..

CS/OS 2025.01.09

Process API란?

일단 UNIX와 POSIX에 대해 알아보자. POSIX는 UNIX 계열 운영체제(Linux, macOS)의 표준 인터페이스이다.그러면 UNIX는 무엇인가??UNIX는 멀티태스킹과 다중 사용자를 지원하는 운영체제이다. UNIX를 기반으로 한 다른 운영체제가 등장함으로 인해 OS 간의 호환성 문제가 발생했다. 이를 해결하기 위해 POSIX 표준이 제정되었다(UNIX 계열 운영체제에서 일관된 API를 제공) 간단하게 POSIX API 몇 개만 살펴보겠다.fork()는 자기 자신을 복제한다고 생각하면 된다. wait()는 자식 프로세스가 종료될 때까지 기다린다. (wait(NULL)은 종료만 기다리고 wait(&rc)는 종료 상태까지 확인이 가능하다.)  exec는 fork를 한 후 자식 프로세스에 다른 일을 ..

CS/OS 2025.01.08

프로세스란?

프로그램은 단순히 저장 장치에 저장된 정적인 코드이다.(디스크)프로세스란 실행 중인 프로그램을 의미하고, 프로그램이 메모리에 로드되어 CPU에서 실행되고 있는 동적인 작업 단위이다.(메모리) 프로세스는 CPU 레지스터(PC, SP, FP), 메모리 영역(Code, Data, Heap, Stack), I/O 정보를 포함하고 있다.Code: 프로그램의 실행 코드Data: 전역 변수, 정적 변수Heap: 동적으로 할당된 메모리(malloc, new)Stack: 함수 호출시 생성되는 지역 변수, 매개 변수 운영체제는 프로세스 생성, 관리, 종료 등의 작업을 수행하기 위해 Process API를 제공한다.Create(fork()), Destroy(kill()), Wait(wait()), 각종제어, 상태(ps) 프..

CS/OS 2025.01.07

운영체제란?

운영체제는 하나의 소프트웨어이다.운영체제는 컴퓨터 하드웨어와 스프트웨어 간의 중간 다리 역할을 해준다.운영체제가 하는 일을 무엇이 있을까??1. 프로세스 관리: 실행 중인 프로그램을 관리2. 메모리 관리: 메모리 할당 및 해제3. 파일 시스템 관리: 데이터 저장 및 검색4. 입출력 관리: 장치와의 데이터 교환5. 보안 및 보호: 자원 접근을 통제 그러면 대체 왜 운영체제가 필요한 것일까?운영체제가 없으면 하드웨어를 직접 제어야하기 때문에 효율성이 떨어진다. 운영체제는 하드웨어와 소프트웨어를 연결하고, 자원을 효율적으로 관리할 수 있게 한다. 그리고 여러 작업을 동시에 처리할 수 있게 도와준다.  운영 체제가 무엇을 책임지고 운영을 하는 것일까?1. 운영체제는 하드웨어를 관리한다.(CPU, 메모리, 디스크..

CS/OS 2025.01.07