Pintos 1주차 컴퓨터 시스템 용어 정리

정글일지 26

컴퓨터 시스템에 관한 용어 정리

1. Interrupt, interrupt handler

trap이라고도 일컬어지는 interrupt는 프로세서에게 최근에 실행된 코드를 중단을 요청해서 event가 때맞은 방식으로 처리될 수 있도록 하는 것이다. 만약 요청이 받아들여지면, 프로세서는 최근 활동을 중단시키고 state를 저장한 후 event를 처리하기 위해 interrupt handler(ISR, interrupt service routine라고도 함)라고 불리는 함수를 실행한다. 이 개입은 보통 일시적이며 비록 interrupt가 치명적인(fatal) error를 표시하는 방법이 있을지라도, interrupt handler가 일을 마친 후 소프트웨어가 평범한 활동을 재개하도록 해준다.

interrupt는 시간과 관련된 감지능력이 필요한 전기적, 물리적 상태 변화를 나타내기 위해 보통 하드웨어 장치에서 사용된다. 또한 공통적으로 실시간 컴퓨팅(real-time computing)같은 컴퓨터 멀티태스킹 수행에 사용된다. 그러한 방식들로 interrupt를 사용하는 시스템은 interrupt-driven이라고 일컬어진다.

interrupt 중 시간과 관련되어 구성되는 것을 timer interrupt라고 한다.

2. Thread

컴퓨터 과학에서, thread의 실행은 전형적으로 운영체제의 한 부분이며 프로그래밍되어 스케쥴러(scheduler)가 독립적으로 관리할 수 있는 지시(instruction)의 가장 작은 단위이다. thread와 프로세스들의 수행은 운영체제들(operating systems)마다 다르다. 많은 경우, 쓰레드는 프로세스의 구성요소이다. 받은 프로세스의 다수의 thread는 메모리 같은 resources를 공유하며 concurrently(동시에) 수행될지도 모르지만, 반면에 다른 프로세스들은(processes) 그런 자원들을 공유하지 않는다. 특히, 프로세스의 thread들은 실행가능한 코드, 동적으로 할당된 변수들의 값과 thread-지역이(non-thread-local) 아닌 전역 변수들을 언제든 공유한다.

Thread의 목적

threads는 보통 다양한 업무를 동시에 수행할 필요가 있는 웹 서버, 멀티미디어 어플리케이션, 운영체제 같은 어플리케이션에서 사용된다. 한 프로그램을 다양한 threads로 나눔으로써, 각 thread는 프로그램의 다른 부분을 동시에(concurrently) 수행할 수 있어 더 효율적이고 빠르게 실행하도록 한다.

추가적으로, threads는 프로그램의 민감성(responsiveness)를 향상시키는데 사용될 수도 있다. 예를들어, GUI(graphical user interface) 어플리케이션의 경우, 분리된 thread가 파일 I/O나 데이터 처리같은 배경 업무(bacground tasks)를 수행하는 동안 main thread가 유저 입력과 display를 다루는데 사용될 수 있다. 이것은 프로그램이 배경에서 자원집약적인(resource-intensive) 업무를 수행하는 동안 유저 입력에 대한 반응을 유지하도록 해준다.

결론적으로, thread는 동시성 프로그래밍을 위한 강력한 메커니즘을 제공해서 개발자가 좀더 효율적이고 반응성 좋은 어플리케이션을 만들도록 해준다.

3. Processor

processor 혹은 processing unit은 보통 메모리나 다른 data stream같은 외부의 data source에서 operation을 수행하는 전기적 구성요소이다. 이 용어는 빈번하게 시스템의 주요 processor인 CPU(central processing unit)을 지칭하는데 사용된다. 그러나 GPU(graphic processing unit)같은 다른 coprocessors 또한 지칭할 수 있다.

4. System call

system call은 컴퓨터 프로그램이 자신이 실행되는 운영체제에게 service를 요청하는 프로그래밍 방식이다. 이것은 하드웨어와 연관된 서비스, 새로운 프로세스의 생성과 실행, 프로세스 스케쥴링 같은 필수적 커널 서비스와의 의사소통 등을 포함한다. system call은 프로세스와 운영체제 사이의 필수적인 인터페이스를 제공한다. 대부분의 시스템에서 system call은 userspace 프로세스에서만 만들어질 수 있다.

system call은 운영체제에 의해 이용 가능하게 만들어지는 서비스들에게 인터페이스를 제공한다. 프로그램이 실행될 수 있는 user mode와 kernel mode가 있다.

user mode

  • user mode에서 실행되는 프로그램은 메모리나 하드웨어, 리소스에 직접 접근이 불가능하다.
  • 프로그램 실행 중 문제가 발생해도 전체 시스템이 망가지는 일은 없어 더 안전하다.

kernel mode

  • kernel mode에서 실행되는 프로그램은 메모리나 하드웨어, 리소스에 직접 접근이 가능하다.
  • 많은 자원에 직접적으 접근이 가능하기 때문에 Privileged mode라고도 부른다.
  • 여기서 프로그램 실행 중 문제가 발생하면(happen to crash) 전체 시스템이 망가지거나 문제가 된다.

User mode에서 실행되는 프로그램이 리소스에 접근이 필요하면 운영체제에 ‘호출(call)’을 한다.

그러면 잠시동안 user mode에서 kernel mode로 전환(switch)되어 리소스에 접근이 가능해진다.

이 user mode에서 kernel mode로 전환 되는 것이 context switching이다.

반대로의 전환도 context switching이다.

리소스 접근을 위한 전환을 요청하는 호출을 system call 이라고 한다.

즉, system call은 컴퓨터 프로그램이 운영체제의 커널에 있는 서비스를 요청하는 프로그래밍 방식이다.

예시 : Source file에서 Destination file로 내용물을 복사(copy)하자.

절차

  1. 복사할(source file) 파일이름 요청 : 유저가 ‘마우스’로 선택 or 직접 ‘입력’ => system call 필요
  2. 모니터에 출력 : 모니터라는 하드웨어 출력 장치 사용, 하드웨어 접근 필요 => system call 필요
  3. 입력(Input) 받기 : 마우스, 키보드 등 하드웨어 입력 장치 사용, 하드웨어 접근 필요 => system call 필요
  4. 결과물(Destination file) 파일이름 요청 : 1과 같음 => system call 필요
  5. 모니터에 출력 : 2와 같음 => system call 필요
  6. 입력 받기 : 3과 같음 => system call 필요
  7. 복사할 파일 열기 : 메모리에 있는 파일에 접근 필요 => system call 필요
  8. 파일이 존재하지 않는다면, 에러 : 실행 종료 => system call 필요
  9. 결과물 파일 만들기 : 파일 생성 => system call 필요
  10. 파일이 존재한다면(이미 같은 이름의 파일이 있다면?) 에러 : 실행 종료 => system call 필요
  11. 복사할 파일에서 읽기(Read) => system call 필요
  12. 결과물 파일에 쓰기(Write) => system call 필요
  13. 읽기가 실패할 때 까지(내용을 다 읽어서 더 이상 읽을 것이 없어서) 11,12 반복
  14. 결과물 파일 닫기 => system call 필요
  15. 완료 메시지 모니터에 출력 : 하드웨어에 접근 필요 => system call 필요
  16. 종료 => system call 필요

5. Context switch

context switch는 프로세스나 thread의 state(상태)를 저장하여, 이후에 실행을 재저장하고 재개할 수 있고, 더 나아가 이전에 저장된 다른 state를 재저장하는 프로세스이다. 이것은 multiple processes가 하나의 CPU를 공유하도록 해주고, 멀티태스킹 운영체제의 필수적인 요소이다. 전통적인 CPU에서, 실행중인 프로그램의 각 프로세스는 다양한 CPU 레지스터를 데이터 저장과 작동중인 프로세스의 현재 상태를 고정(hold)하기 위해 활용한다. 그러나, 멀티태스킹 운영체제에서는, 운영체제가 프로세스나 threads들 사이에서 다양한 프로세스들을 동시에 수행하도록 전환된다.

context switch라는 문구의 정확한 의미는 다양하다. 멀티태스킹 문맥에서, 한 업무(task)에 대한 시스템 상태를 저장해서 업무가 잠시 멈추고 다른 업무가 재개될 수 있도록 저장하는 프로세스를 말한다. 또한 context switch는 task가 disk storage(디스크 저장)에 접근할 필요가 있을 때 다른 task들을 위해 CPU 시간을 풀어주는(free up)것같은 interrupt의 결과로 발생될 수도 있다. 어떤 운영체제는 또한 user mode와 kernel 모드 task 사이를 이동하기 위해 context switch를 필요로 하기도 한다. context swtiching 프로세스는 시스템 성능에 부정적인 영향을 끼칠 수도 있다.

또한 system call에서 user mode와 kernel mode 전환을 뜻하기도 한다.

6. Scheduler

스케쥴은 데이터베이스 안 트랜젝션 set을 바탕으로 한 수행 리스트(a list of action)이고, scheduling은 컴퓨터 멀티태스킹과 멀티프로세싱 운영체제에서 이루어지는 다양한 프로세스 방식이다. 이 종류의 scheduling은 컴퓨터 프로그램 내에 생겨서 유저는 완전히 어떤 업무가 언제 수행되는지 완전히 모를수도 있다. 이 scheduling을 scheduler가 한다.

7. Round Robin(RR) scheduling

Round-Robin scheduling은 프로세스와 네트워크 스케쥴러에서 이뤄지는 알고리즘 중 하나이다. 용어의 일반적인 사용에서는, time slice가 각 프로세스에 동일한 부분만큼 순환하는 순서로 배당되어 모든 프로세스들을 우선순위 없이 다룬다는 의미이다. Round-Robin scheduling은 수행하기 간단하고 쉬우며 굶는 프로세스가 없다(starvation-free).

8. Thread Control Block(TCB)

Thread Control Block(TCB)는 thread를 다루는데 필요한 정보가 있는 운영체제 커널 안의 데이터 구조이다. TCB는 운영체제에서 thread의 징후이다. TCB내에 포함된 정보의 예시는 다음과 같다.

  • Thread Identifier : 모든 새 thread가 가지는 고유 id(tid)
  • Stack pointer : 프로세스 내 thread의 stack을 가리키는 포인터
  • Program counter : thread의 최근 프로그램 지시를 가리키는 포인터
  • Thread’s register values : thread의 레지스터 값
  • Pointer to the Process Control Block(PCB) of the process that the thread lives on : thread가 위치한 프로세스의 PCB를 가리키는 포인터
  • State of the thread : thread의 상태(running, ready, wating, start, done)