📎 Term - CPU : 명령어들을 실행하는 하드웨어 - Processor(처리기) : 하나 이상의 CPU를 포함하는 물리적인 칩 - Core : CPU의 기본 연산 단위 (코어는 명령어를 실행하고 데이터를 저장하기 위한 레지스터를 포함하는 구성 요소) - 다중 코어(Multicore): 동일한 CPU에 여러 개의 코어 포함 - 다중 처리기(Multi-Processor): 여러 프로세서를 포함
1.3.1 단일 처리기 시스템 (Single Processor System)
하나의 CPU를 사용하여 작업을 처리하는 방식
하나의 코어를 갖고 있다
1.3.2 다중 처리기 시스템 (Multi-Processor System)
두 개 이상의 CPU를 포함하며, 각 CPU는 메모리와 주변 장치를 공유하거나 독립적으로 사용할 수 있다.
병렬처리를 가능하게 하여 성능을 향상하고, 작업 속도가 빠르다.
운영체제는 다중 프로세서를 관리하며, 각 프로세서에 작업을 할당한다. 메모리는 공유 메모리 구조(UMA) 또는 분산 메모리 구조(NUMA)를 사용할 수 있다.
장점
하나의 프로세서가 고장 나더라도 나머지 프로세서가 작업을 계속 수행하여 시스템이 멈추지 않는다.
여러 프로세서가 동시에 작동하여 단위 시간당 처리되는 작업 수를 늘린다. (처리량이 증가한다.)
메모리, 주변 장치 등을 공유하여 비용이 효율적이다.
다중 처리기 시스템의 종류
Symmetric Multi Processor & Asymmetric Multi Processor
대칭형(Symmetric Multiprocessors)
: 각자 개별적인 CPU, register, cache를 갖는다.*단점 : 어떤 CPU는 IDLE, 어떤 CPU는 overload될 수 있다.
: 단 메모리와 시스템 버스는 공유한다.
: 모든 프로세서가 동일한 운영체제를 실행하며, 동등한 관계를 유지한다.
비대칭형(Asymmetric Multiprocessors)
: 하나의 마스터 프로세서가 다른 프로세서를 제어하며, 마스터-슬레이브 관계를 형성한다.
CF. 멀티 코어 시스템 (Multi Core System)
on-chip communication(멀티 코어) VS between-chip communication (멀티 프로세서 시스팀)
- 하나의 프로세서(칩) 위에 여러 개의 코어가 있는 시스템이다.
→ 단일 코어를 가진 여러 개의 칩(다중 프로세서) < 하나의 칩에 여러 개의 코어 (다중 코어) 더 효율적이다!
한 칩에 있으니까 자기들끼리의 통신이 물리적으로 더 빠를 수밖에!
- 각 코어는 독립적으로 명령어를 읽고 실행할 수 있으며 병렬 처리가 가능하다.
- 코어 간에 캐시를 공유하거나 독립적인 캐시를 가질 수 있다.
- 병렬 처리가 가능하고, 하나의 칩에 모든 코어가 통합되어 있어서 제조 비용도 낮다.
단점 : 속도 증가가 코어 수에 비례하지 않는다.
멀티코어 시스템과 멀티프로세서 시스템의 차이점
Blade Server (블레이드 서버)
최근에 개발된 형태의 멀티 처리기 시스템 (multiprocessor)
여러 개의 처리기 보드와 입출력 보드, 네트워킹 보드들이 하나의 chassis안에 장착되는 형태.
블레이드 처리기 보드는 독립적으로 부팅될 수 있고, 자기 자신의 운영 체제를 실행한다.
여러 독립적인 다중 처리기 시스템으로 구성되면서, 동시에 그 자체가 다중 처리기이기도 하다. (조금 모호한 라인에 있음)
1.3.3 클러스터형 시스템
여러 CPU를 가진 시스템의 또 다른 유형으로 약결합이다.
둘 이상의 독자적 시스템 또는 노드들을네트워크로 연결하여 구성한다. 이 때 각 노드들은 단일 처리기 시스템 또는 멀티코어 시스템일 수 있다.
네트워크로 연결하므로 고성능 컴퓨팅 환경을 제공하는데 사용될 수 있다.
클러스터형 시스템 vs 다중 처리기 시스템 1 ) 클러스터형 시스템 독립적인 시스템이 네트워크로 연결되어 구성된다. → 각 노드가 자체 CPU, memory, OS를 갖춤 2) 다중 처리기 시스템 여러 CPU가 동일한 시스템 버스와 메모리를 공유하거나 독립적으로 사용하는 구조이다. → 여러 CPU가 동일한 시스템 내에서 작동한다.
비대칭형 클러스터링
다른 컴퓨터들이 응용 프로그램을 실행하는 동안, 한 컴퓨터는 긴급 대기 모드 상태를 유지한다.
→ 활성 서버를 감시하는 작업만 하며, 감시하는 서버가 고장나면 긴급 대기에 있던 컴퓨터가 활성 서버가 된다.
대칭형 클러스터링
둘 이상의 호스트들이 응용 프로그램을 실행하고 서로 감시한다.
사용 가능한 하드웨어를 전부 사용하므로, 더 효율적이다. 단 효율적으로 동작하기 위해서는 실행할 수 있는 응용프로그램이 하나 이상 존재 해야 한다.
1.4 운영체제의 구조
운영체제 : 프로그램이 실행될 환경을 제공한다. 운영체제의 내부 구조는 매우 다양하지만, 많은 공통점을 가지고 있다.
1. 다중 프로그래밍을 할 수 있다.
한 명의 사용자도 여러 프로그램을 동시에 시킬 수 있다.
시스템 자원을 효율적으로 이용할 수 있는 환경을 제공한다. (cpu, 메모리, 주변 장치 등)
하지만 사용자와 컴퓨터 시스템과의 상호작용을 제공하진 않는다.
→ 시분할 등장!
2. 한 번에 여러 작업을 메모리에 적재한다.
하지만 메모리에 적재되기 전에는Pool(작업 풀)에서 대기한다.
→ pool 사이즈 > 메모리 사이즈
Pool은 디스크 내의모든 프로세스로 구성되며, 이들은 메인 메모리로의 할당을 기다린다.
운영체제는 메모리 내 작업 중 하나를 선택해서 실행한다.
3. 시분할 운영체제
: 다중 프로그래밍의 논리적 확장이다.
: CPU가 다수의 작업들을 교대로 실행하지만 매우 빈번하게 교대가 일어나서,
사용자들은 각자 자기의 프로그램이 실행되는 동안 상호작용 가능하다.
: 시분할 시스템은 시스템과 사용자의 직접적 통신을 제공하는 대화식(interactive) 컴퓨터 시스템을 필요로 한다.
→ 대화식 입출력
: 키보드, 마우스, 터치패드와 같은 입력 장치를 사용하여 운영체제나 프로그램에 직접 명령하고 출력 장치의 응답을 기다린다.
이 기다리는 시간이response time이고, 이 시간은 보통 1초 이내이다.
: 시분할 운영체제는 동시에 많은 사용자가 컴퓨터를 공유할 수 있게 한다.
짧은 CPU 시간 할당을 통해서 다수가 공유하지만, 각 사용자는 전체 컴퓨터를 전용하는 것처럼 느껴진다.
: 시분할 되는 컴퓨터의 작은 부분을 제공하기 위해CPU 스케줄링과다중 프로그래밍을 사용한다.
시분할과 다중프로그래밍 운영체제
여러 작업이 메모리에 동시에 유지되어야 한다.
작업 스케줄링
: 메모리 공간이 부족하여 전부 다 적재하지 못하는 경우, 선택적으로 메모리에 적재할 프로그램을 결정하는 과정
CPU 스케줄링
: 메모리에 적재 되어 실행준비가 되어있는 프로그램들 중에서 어느 것을 실행할지 결정하는 작업
시분할 시스템에서의 운영체제
적절한 응답시간과 파일시스템 제공 + 4개
적절합 응답시간 (response time)을 보장해야하고, 이를 위해서스와핑을 하거나가상메모리를 사용한다.
스와핑 =스왑인(swap-in) + 스왑아웃(swap-out) → 프로세스를 메인 메모리에서 디스크로 적절히 이동시키는 작업
가상 메모리 작업의 일부만 메모리에 적재되더라도 수행을 허용하는 기법이다. 프로그램이 물리적 메모리보다 커도 된다. 합리적인 응답시간을 보장할 수 있다.
파일시스템 제공해야한다. → 디스크 관리 기법
디스크 관리 기법 필요
자원 보호를 위한 기법 제공 필요
작업 동기화와 통신 기법 제공 필요
교착 상태(deadlock)에 빠지지 않도록 관리해야 함
1.5 운영체제 연산
현대의 운영체제는Interrupt Driven방식이다.
event는 항상 Interrupt || Trap을 발생시켜 신호를 만든다.
Trap (트랩 = 예외)
트랩은 소프트웨어에 의해 생성된 인터럽트이다.
→ 오류(0나누기 또는 유효하지 않은 메모리 접근 등) 또는 사용자 프로그램의 운영체제 서비스 요청에 의해 발생
각 유형의 인터럽트에 대해 어떤 행동을 취해야 할지는 운영체제 내의 별도의 코드 세그멐트가 결정한다.
❓인터럽트와 트랩의 차이 인터럽트는 하드웨어 장치에 의해 발생하며, 키보드 입력, 타이머, 네트워크 카드 등이 인터럽트를 발생시킬 수 있다. 인터럽트는 비동기적으로 발생하며, 프로그램의 실행 중 언제든지 발생할 수 있다. 인터럽트는 하드웨어 장치가 CPU에 특정 이벤트를 알리는 데 사용되며, 예를 들어 I/O 작업이 완료되었음을 알리는 데 사용된다.
트랩은 사용자 프로그램에 의해 발생하며, 운영체제의 서비스를 요청하거나 예외 상황이 발생할 때 사용된다. 트랩은 동기적으로 발생하며, 프로그램의 실행 중 특정 지점에서 예상된 이벤트로 발생한다. 예를 들어, 시스템 호출은 트랩을 통해 이루어질 수 있다.
이와 같은 이중 모드는 잘못된 사용자로부터 운영체제와 잘못된 사용자 서로를 보호할 수 있는 방법을 제공한다.
특히 악영향을 끼칠 수 있는 일부 명령을privileged instruction으로 지정하여 보호를 구현한다.
언제 커널 모드로 바뀔까?
많다. (아래 상황 참고)
Prvileged Instruction이 사용자 모드에서 수행될 때If 사용자모드에서 privileged instruction 하려 한다면, 하드웨어가 실행하지 않고 운영체제로트랩을 건다.
하드웨어가privileged instruction이 커널 모드에서만 수행되도록 허용한다.
입출력 제어
타이머 관리
인터럽트 관리를 위한 명령어들이 있다.
이중 이상의 모드도 있다!
모드 관리를 위해 1비트 이상 필요하다.
가상 기계 관리자 (VMM) 가상 기계를 생성하고 관리하며 CPU 상태를 변경한다. (그러니 권한이 어느정도 있을 수밖에)
커널보다는 작지만 사용자 프로세스보다는 큰 권한을 갖는다.
컴퓨터 시스템의 명령 실행 주기
초기 제어권은 운영체제에 있다. (커널 모드)
사용자 응용으로 제어권이 넘어간다. (사용자 모드)
인터럽트, 트랩, 시스템 호출을 통해 운영 체제로 다시 넘어간다.
❓시스템 호출은 뭘까? (System Call) 프로그램이 운영체제(OS)로부터 특정 서비스를 요청하는 방법이다. 이는 프로그램이 직접 하드웨어에 접근하거나, 운영체제의 중요한 자원에 직접적으로 접근할 수 없도록 하는 보안 장치로도 작동한다. 시스템 호출은 주로 사용자 모드에서 실행 중인 프로그램이 커널 모드로 전환하여 운영체제의 서비스를 요청하는 방식으로 이루어진다. 인터럽트 벡터의 특정 위치로 트랩을 거는 형태를 취한다. 하드웨어에 의해서 하나의 소프트웨어 인터럽트로 취급된다. ex. 파일 관리: open()으로 파일을 열거나 close()로 파일 닫기 통신:socket()으로 소켓 생성하거나 connect()로 네트워크 연결하기
1.5.2 타이머
타이머의 목적
: 운영체제가 CPU에 대한 제어를 유지할 수 있도록 보장하기 위함.
프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여 제어가 운영체제로 복귀하지 않는 경우를 허용하지 않기 위해 존재한다.
타이머
지정된 시간 후 컴퓨터를 인터럽트 할 수 있도록 설정한다.
고정적일 수 있고 가변적일 수 있다. (설정 가능 한 듯 ← privileged instructrion이다.)
가변 타이머
fixed-rate dock과 counter 로 구현한다.
❓타이머로 인터럽트 발생시키는 거에 화면 보호기도 예시가 될 수 있을까? → 그렇다! 1. 타이머 설정: 운영체제는 사용자가 설정한 시간(예: 5분) 동안 컴퓨터가 사용되지 않으면 화면 보호기를 실행하도록 타이머를 설정 2. 타이머 인터럽트: 설정된 시간이 경과하면 타이머가 인터럽트를 발생. → 이 인터럽트가 운영체제에 의해 처리되어 화면 보호기 3. 실행화면 보호기 실행: 화면 보호기가 실행되면, 화면에 애니메이션이나 이미지 슬라이드쇼가 표시.
1.6 프로세스 관리
프로세스란
: 한 시스템 내의 작업 단위이다.
: 시스템은 프로세스의 집합으로 구성되며, 프로세스의 종류도 두 가지이다.
→ 사용자 프로세스 + 운영체제 프로세스(시스템 코드를 수행하는 프로세스)
운영체제 프로세스
운영체제 자체의 기능을 수행하는 프로세스로, 시스템 관리, 자원 할당, 보안 등과 관련된 작업을 처리한다. 예를 들어, 시스템의 메모리 관리나 디스크 관리를 담당하는 프로세스가 이에 해당함.
: 모든 프로세스는 하나의 CPU를 멀티플레싱 함으로써 병행 수행될 수 있다.
: 프로세스는 자신의 일을 수행하기 위해 CPU 시간, 메모리, 파일, 입출력 장치와 같은 여러 자원을 필요로 한다.
✅운영체제가 프로세스를 관리와 관련하여 하는 작업들 CPU에 프로세스와 스레드 스케줄하기 사용자 프로세스와 시스템 프로세스 프로세스의 일시 중지와 재실행 프로세스 동기화를 위한 기법 제공 프로세스 통신을 위한 기법 제공
프로그램과 프로세스
프로그램 그 자체는 프로세스가 아니다!
하나의 프로그램은 디스크에 저장된 파일의 내용과 같이 수동적 개체이다.
반면 프로세스는 다음 수행할 명령을 지정하는프로그램 카운터를 가진 능동적 개체이다.
한 프로세스의 수행은 반드시 순차적이어야 하고, CPU는 그 프로세스가 끝날 때까지 해당 프로세스의 명령을 차례로 수행한다.
→ 두 개의 프로세스가 동일한 프로그램과 연관되어 있더라도, 두 개의 별도의 수행 순서로 처리된다.
다중 스레드 프로세스는 복수개의 프로그램 카운터를 가지고 있고, 이 카운터들은 각 스레드가 실행할 다음 명령어를 가리키게 된다.