반응형

컴퓨터/운영체제 8

[OS] Thread (3)

이전에서 스레드 모델 이야기를 했다. 유저 레벨 스레드의 경우, 스레드를 제한없이 만들 수 있다는 등의 이야기를 했는데 스레드를 많이 사용하다보면 이를 생성/제거하는 것이 성능상의 오버헤드가 될 수 있다. 관리를 잘 못해주면 프로그램이 오작동할 수도 있다. 그래서 이를 잘 관리 해주기 위해 implicit threading을 해주는 툴들이 개발됐다. 이 툴들은 스레드 생성/관리를 런타임 라이브러리, 컴파일러를 통해 사용된다. 툴에는 Thread Pool과 OpenMP 두가지가 대표적이다. Thread Pool 서버-클라이언트 시스템에서 스레드를 사용하는 모델이 있다고 생각해보자. 클라이언트가 서버에 리퀘스트를 보내면, 서버는 이를 실행시키기 위해 스레드를 생성하여 리퀘스트를 핸들링할 것이다. 그리고 작업..

[OS] Thread (2)

스레드가 어떤 모드에 있냐에 따라 '유저 레벨 스레드'와 '커널 레벨 스레드'로 나뉜다. 유저 레벨 스레드 (User-level Thread) - 유저 레벨 라이브러리로 구현한다. 라이브러리에는 스레드 생성/제거, 스케쥴링, 컨텍스트 저장/복구 등이 구현돼야한다. - 모든 코드와 데이터 스트럭쳐가 유저 스페이스에 존재한다. - 커널은 유저 스레드가 얼마나 돌아가는지 모른다. 커널의 입장에서는 하나의 프로세스로 보인다. 장점 - 운영체제가 커널 스레드를 지원하지 않아도 사용할 수 있다. - 커널 모드에 진입하지 않아도 된다. 스레드 스위칭에는 함수 호출만큼 코스트가 든다. - 스케쥴링 정책을 응용 프로그램에 맞춰 만들 수 있다. 각, 프로세스마다 폴리시가 있는 것으로 생각할 수 있다. 단점 - 스레드 하나..

[OS] Thread (1)

스레드가 왜 필요한가? - 하나의 프로세스에서 병렬 실행을 위해 - 동일한 환경에서 서로 다른 일을 동시적으로 처리할 수 있도록 동일한 환경 = 프로세스, 프로그램 코드, 데이터, 메모리 공간, 커널 데이터 구조 등을 말한다. 예) 웹 브라우저 스레드를 지원하지 않는 싱글코어 프로세서에서는 유저 인터페이스를 처리할 때는 렌더링이 안되고, 렌더링을 하는 동안에는 유저 인터페이스를 처리할 수가 없다. 즉, 내가 어떤 화면을 클릭해서 렌더링을 하는 동안에는 다른 모든 것 정지된 상태이고, 처리가 되지 않는다. 다른 것도 실행되게 만들어주려면 실행 흐름을 여러개 만들어주어야 한다. 스레드는 경량 프로세스라고도 불린다. 스레드는 스레드별로 스레드 아이디, 프로그램 카운터, 레지스터셋, 스택을 갖고 있다. 멀티 스..

[OS] Inter Process Communication (IPC)

유저가 실행시키는 프로세스들은 OS에서 동시적으로 돌아간다. 우리가 돌리는 프로세스들이 항상 독립적으로 돌아가는 것보다는 이들이 공유할 정보가 있다면 공유하고 협력한다면 효율을 더 높일 수 있는데, 이를 프로세스간의 커뮤니케이션을 통해 해결할 수 있다. 이를 'Inter Process Communication' (IPC) 라고 부른다. 프로세스가 협력을 하면 몇가지 장점이 있는데, 이는 다음과 같다. 프로세스 협력의 이점 Information sharing - 몇몇 응용 프로그램들은 비슷한 정보를 갖고 돌아간다. (복사하고 붙여넣는 경우를 생각해보면 된다.) Computation speedup - 어떤 태스크를 빠르게 수행하고 싶을 때, 이걸 여러 서브 태스로 나눠서 병렬적으로 실행할 수 있다. Moul..

[OS] Context Switch와 레지스터 셋의 관계

운영체제 수업 들으면 context switch가 오버헤드라는 이야기를 한다. 왜냐하면 context switch를 하는동안에는 프로세서가 하는 일을 멈추고 pcb를 바꾸기 때문이다. 이 오버헤드를 줄이려면 하드웨어단에서 개선을 해주어야 하는데, CPU의 레지스터셋을 늘려주어야 줄이는 것이 가능하다고 한다. 예를 들어서, CPU의 레지스터 셋이 두개인 경우에는 프로세스1에 대한 PCB1을 레지스터 셋1에 두고 연산을 한다고 생각해보자. 이때 인터럽트가 들어와서 프로세스1에서 프로세스2로 context switch를 수행하라고 하면, 레지스터 셋1에서 돌아가던 걸 잠깐 멈추고 미리 프로세스2에 대한 PCB2를 레지스터 셋2에 넣고 돌리면 된다. 그리고 프로세스2에 대해서 할 일을 다했으면 바로 프로세스1을..

[OS] Interrupt

CPU가 프로그램을 실행하고 있는데 I/O 등의 장치에 의해 혹은 예외상황이 발생해 처리가 필요한 경우에 이를 알려주는 것이 인터럽트(Interrupt)다. 인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉜다. 하드웨어 인터럽트는 CPU가 아닌 다른 하드웨어 장치가 CPU에 어떤 정보를 주거나 서비스를 요청해야하는 경우 발생시키는 인터럽트이다. 소프트웨어 인터럽트는 소프트웨어가 발생시키는 인터럽트를 가리킨다. 보통 응용프로그램을 일컫는다. 종류로는 시스템 콜(system call)과 예외 상황(exception)이 있다. 예외 상황의 예시로는 어떤 값을 0으로 나누는 것을 생각해보면 된다. 본문에서는 소프트웨어 인터럽트의 종류에 시스템 콜과 예외 상황이 있다고 이야기했지만, 책이나 사람에 따..

[OS] Operating System Structures (part2)

*본 포스팅은 2020학년 1학기 홍석인 교수님의 운영체제 수업을 두서없이 정리한 것임을 밝힙니다. System call interface에서 파라미터를 OS에게 주는 방법은 세가지가 있음 - The simplest approach: pass the parameter in registers CPU의 register 갯수는 한정돼있음. 그런데, 파라미터의 갯수는 많기 때문에 적절하지 않은 접근법임 - Block method: Parameters are stored in a block (memory), and the address of the block is passed as a parameter in register (eg. printf("hello")의 경우 hello를 메모리에, address를 reg..

[OS] Operating System Structures (part1)

*본 포스팅은 2020학년 1학기 홍석인 교수님의 운영체제 수업을 두서없이 정리한 것임을 밝힙니다. - 운영체제가 유저와 프로세스, 다른 시스템들에게 어떤 서비스를 제공하는 지 - 운영체제를 구성하는 것이는 무엇이 있는지 알아본다. 운영체제 : 운영체제는 기본적으로 프로그램을 실행할 수 있는 환경을 제공해준다. 유저를 위한 운영체제 서비스 - User Interface a. CLI: Command-line interface (리눅스 머신을 사용할 때 주로 터미널을 띄우고 커맨드를 입력해 컴퓨터를 사용하는 데 이를 CLI라 함) b. GUI: Graphical user interface. (윈도우 기반으로 컴퓨터를 사용하는 것이라 이해하면 됨) c. Batch Interface. (Computing sys..

반응형