
OS는 시스템의 안정성과 보안을 유지하면서, 사용자 프로그램과 하드웨어 자원을 효율적으로 관리해야 한다.
Memory protection : OS는 어떤 프로그램이 다른 프로그램의 데이터나 OS의 중요 코드를 무단으로 접근 혹은 변경하는 것을 방지해야 한다. 즉, 각 Process는 독립적이어야 하고, 각각의 영역 침범은 통제되어야 한다.
OS는 메모리의 각 영역에 대해 접근 권한을 설정하여, 특정 프로그램의 권한 초과 접근 시도를 차단한다.
Timer : CPU 자원의 공유는 매우 중요하므로, 특정 프로세스가 CPU를 독점하는 것을 방지한다.
CPU-Scheduling : 각 프로세스에 CPU Time Quantum을 할당하여, 해당 프로세스의 실행 시간이 정해진 Time quantum을 넘어가면 프로세스를 중단한다.
Privileged instructions : OS는 시스템의 보안과 효율적인 관리를 위해 운영 모드를 분리하여 일부 명령어는 오직 커널 모드에서만 실행될 수 있도록 한다.
Interrupts : OS가 좀 더 유연하게 유저 프로그램들을 컨트롤 할 수 있도록 돕는 역할을 한다. ex) 프로그램 실행중 키보드 입력 감지
** Kernel : OS에 중요한 Process들은 메인 메모리에
상주해있는데, 이를 Kernel이라 부른다. Kernel들은
우선순위가 매우 높으며, System call을 통해 관리한다.

Serial Processing (직렬 처리) : 과거 컴퓨터는 여러가지 부분에서 현재와 다르다.
1). 운영체제의 부재 : 과거 컴퓨터는 운영체제가 없었기 때문에, 프로그래머들은 컴퓨터 하드웨어와 직접적으로 상호작용 했어야 했다. 이를 위해선 Display lights, Toggle switches, Some form of input device...와 같은 장치들을 통해야만 했다.
2). Series : 초기 컴퓨터 시스템은 리소스가 매우 제한적이었기 때문에 사용자들이 컴퓨터를 사용하려면 한 번에 한 명씩 차례대로 접근했어야 했다. 또한 처리 능력이 열악했기 때문에 프로그램 실행을 위해선 상당한 시간과 노력이 필요했다.
Simple Batch Systems : 초기 컴퓨터 환경에서 프로세서의 효율적 사용을 위해 개발된 시스템이다. 이 시스템은 사용자가 직접 컴퓨터와 상호작용하지 않고 수행하고자 하는 작업을 컴퓨터 운영자에게 제출하였고, 운영자는 이런 작업을 묶어서 배치(Batch)로 만들어 이를 컴퓨터 입력 장치에 넣어 작업을 처리했다. 컴퓨터는 이 배치에 있는 작업이 끝날 때마다 모니터에 반환하며 다음 작업으로 넘어갔다.
장점
1). 프로세서 사용 효율 증가 : 이런 시스템을 통해 프로세서는 작업이 준비됨과 동시에 다음 작업으로 즉시 전환할 수 있어, 프로세서 사용 효율이 증가했다.
2). 사용자의 작업 관리 간소화 : 사용자는 운영자에게 하고싶은 작업을 제출하기만 하면 되므로, 컴퓨터 작업에 직접 참여하지 않게 되었다.
한계점
1). 사용자 피드백의 지연 : 사용자는 자신의 작업이 처리되는 동안 다른 작업의 상황을 알 수 없었기 때문에, 결과를 받아야만 알 수 있었다.
2). 유연성 부족 : 작업의 우선 순위 변경이나 작업의 삽입이 어려워, 유연한 작업 배치가 불가능했다.

Uniprogramming System에서 프로세서의 작동 방식은 다음과 같다.
1). 명령어 실행 : 프로세서가 메모리에 로드된 프로세스를 순차적으로 실행한다.
2). I/O 명령어 도달 : 프로세스 실행도중 I/O 명령어에 도달하면, 프로세서는 해당 I/O 작업이 완료될 때까지 대기해야한다.
3). I/O 대기 : 프로세서는 I/O 장치가 데이터를 읽거나 쓰는 작업을 완료할 때까지 아무 작업도 할 수없다 (Idle 상태)
4). 작업 재개 : I/O 작업이 완료되면, 프로세서는 프로세스가 중단되었던 지점에서 프로세스를 다시 실행한다.
Uniprogramming System은 I/O 장치는 프로세서에 비해 매우 느리기 때문에 프로세서의 작업 대기 시간이 길어져 CPU를 충분히 활용하지 못하였다.

Multiprogrmming의 작동 원리는 다음과 같다.
1). 프로세스 적재 : 시스템이 여러 프로세스를 메인 메모리에 적재한다. OS는 메모리 관리 기법 (Paging, Segmentation...)을 사용하여 각 프로세스에 메모리 공간을 할당하고, 각 프로세스 간의 영역 침범을 방지한다.
2). CPU Scheduling : CPU는 한번에 한 프로세스만 처리할 수 있기 때문에, 운영체제는 CPU Scheduling Algorithm을 통해 CPU time을 여러 프로세스에 적절히 할당한다.
3). 입출력 대기 : I/O Process가 입출력 작업을 요청하면(Interrupt), 현재 처리중인 Process는 대기 상태로 전환되고 CPU는 I/O 작업이 진행되는 동안 다른 프로세스를 실행한다. 즉, 특정 프로세스가 입출력 작업의 완료를 기다리는 동안, OS는 다른 프로세스에 CPU를 할당하여 작업을 처리할 수 있다.
4). Context Switching : 한 프로세스에서 다른 프로세스로 CPU 제어권이 넘어갈 때, OS는 현재 프로세스의 상태를 저장하고 다음 프로세스의 상태를 복원하는 과정을 수행한다.
MultiProgramming System의 장점
1). CPU 활용도 향상 : 한 프로세스가 I/O 작업 등으로 인해 대기하는 동안 프로세서가 다른 프로세스로 전환하여 계속해서 작업을 수행하므로 전체 시스템의 처리량을 높일 수 있다.
2). 응답 시간 개선 : 특정 프로그램이 입출력 작업을 기다리는 동안 다른 프로그램이 작업을 수행할 수 있기 때문에 사용자의 요청에 대한 응답 시간이 단축될 수 있다.
극복해야하는 점
1). 메모리 관리의 복잡성 : 여러 프로그램이 메모리에 동시에 할당되어 있으므로, 메모리 관리가 복잡해진다. 메모리 충돌과 같은 문제를 방지하기 위한 방법을 고안해야한다.
2). 리소스 경합 (Resource contention) : 여러 프로세스가 동일한 자원을 필요로 할 때, 리소스 경합이 발생할 수 있다. 이 때문에 성능 저하가 발생할 수도 있다. (먼저 자원을 획득한 프로세스가 작업을 마칠 때까지 다른 프로세스는 지연되므로)
** 대화형 작업이란? 텍스트 편집 / 웹 브라우징 등
사용자의 입력을 받아 즉각적으로 결과를 제공하며 사용자와
시스템간에 지속적인 상호작용을 하는 것.
Time Sharing System의 주요 특징은 다음과 같다.
1). 동시 접근 : 여러 사용자(프로세스)가 동시에 시스템에 접근할 수 있다. 터미널 또는 네트워크를 통해 이루어질 수 있다.
2). 프로세서 시간 공유 : 시스템의 프로세서 시간은 모든 프로세스 사이에서 공유된다. OS는 각 프로세스에게 Time quantum을 할당하며, 모든 프로세스가 작업이 동시에 수행되고 있는 것처럼 보인다.
3). 대화형 작업 처리 : 사용자는 시스템과 직접 상호작용하며, 입력과 출력이 거의 실시간으로 이루어진다. 즉, 사용자는 작업의 실행 결과를 즉시 확인할 수 있다.
4). 자원 관리 : Time Sharing System은 메모리, CPU-Time, 저장 공간등의 자원을 효율적으로 관리해야한다.
5). 보안 및 격리 : 프로세스간의 작업은 서로 독립적이어야 하며, 시스템은 프로세스 데이터의 보안을 유지해야한다. 각 프로세스의 작업이 서로에게 영향을 미치면 안된다.
Time Sharing System은 다음과 같은 환경에서 구현될 수 있다.
1). Multi Tasking : 여러 작업을 동시에 처리할 수 있는 멀티태스킹 시스템을 필요로 함.
2). CPU Scheduling : 각 프로세스에 CPU-Time을 할당하기 위해 필요함.
3). 메모리 관리 : 효율적인 메모리 관리 기법을 사용하여 메모리 자원을 효과적으로 분배해야함.
4). 보안 메커니즘 : 프로세스의 데이터 보안과 격리를 보장해야함.

Multiprogramming과 Time Sharing System의 차이점
멀티 프로그래밍
1). 주요 목표 : 프로세서 사용률 극대화
2). 작업 지시 출처 : 작업 제어 언어 (JCL) 명령어로 제공
프로세스 사용률 극대화에 중점을 둔 시스템.
Time Sharing System
1). 주요 목표 : 응답 시간 최소화
2). 작업 지시 출처 : 터미널에 입력된 명령어
사용자가 시스템과 상호작용하는 동안의 지연 시간을 최소화하는 것에 중점을 둔 시스템.
멀티프로그래밍 프로세서 사용률 극대화
시분할 시스템 응답 시간 최소화

프로세스는 OS 구조의 기본 요소로, 다음과 같이 정의한다.
1). 실행중인 프로그램
2). 실행 중인 프로그램의 인스턴스
3). 프로세서에 할당되어 실행될 수 있는 Entity
4). 단일 순차적 실행 스레드, 현재 상태, 그리고 관련된 일련의 시스템 자원을 특징으로 하는 활동 단위
OS가 작업을 처리하는 단위 = 프로세스
Components a Process : 프로세스는 크게 세 가지 구성 요소로 이루어져 있다.
1). Code : 프로세스가 실행하는 코드 자체이다 (컴파일된 바이너리 코드 혹은 스크립트 언어로 작성된 코드).
2). Data (변수, 작업 공간, 버퍼 등) : 프로그램 실행에 필요한 변수, 작업 공간, 버퍼 등의 데이터이다.
3). Process State : OS가 프로세스의 현재 상황을 관리하고 적절히 실행하기 위해 사용하는 정보. 프로세스는 생명 주기동안 여러 상태를 거치며, OS는 이런 상태를 기반으로 프로세스 스케줄링, 자원 할당, 실행 제어 등을 결정한다.

Process Sate
1). New : 프로세스가 생성되고 초기화 된 상태. 이 상태의 프로세스는 실행 준비 큐로 이동한다.
2). Ready : 프로세스가 CPU에서 실행될 준비가 완료된 상태. 이 상태의 프로세스는 CPU할당을 기다리며 준비 큐에서 대기함.
3). Running : 프로세스가 CPU 자원을 할당받아 명령어를 실행하고 있는 상태. 한 번에 하나의 프로세스만이 하나의 CPU코어에서 실행된다.
4). Waiting (Blocked) : 프로세스가 I/O 작업의 완료와 같은 이벤트, 리소스 할당 등을 기다리고 있는 상태. 대기 상태의 프로세스는 해당 이벤트가 발생하거나 필요한 자원을 할당받으면 다시 준비 상태로 돌아간다.
5). Terminated : 프로세스가 실행을 완료하고 종료된 상태이다. OS는 프로세스가 사용했던 자원을 회수한다.
이런 프로세스의 상태 전환은 OS의 Scheduler와 프로세스 관리자에 의해 관리된다.
병렬처리(Parallel Processing)는 하나의 Process를 작은 단위의 여러 Process로 나누어 처리하는 것을 의미한다.
1). 작업 처리 : 큰 데이터 집합을 여러 개의 작은 데이터 덩어리로 나누고, 각각을 동시에 다른 프로세서에서 처리한다.
2). 대규모 병렬 처리 (Massive Parallel Processing, MPP) : 프로세서가 여러개 사용되므로, 병렬적인 데이터 처리가 가능하다. 때문에 대용량 데이터 처리, 복잡한 과학적 계산 등이 필요할 때 유용하다.
Parellel Processing
장점
1). 성능 향상 : 여러 처리 장치가 동시에 작업을 수행하기 때문에, 처리 속도가 빠르다
2). 효율적인 자원 사용 : 자원을 병렬적으로 사용하므로, 하드웨어 자원의 활용도가 높아진다.
3). 규모 확장성 : 시스템의 성능을 향상시키고자 할 때, 프로세서를 추가 설치하면 된다.
한계점
1). 동기화 : 여러 프로세서가 동시에 작업을 수행하므로, 데이터 일관성 유지가 중요하다. 따라서 Dependance를 유지하기 위해 복잡한 메커니즘이 필요하다.
2). 분배 : 데이터를 여러 프로세서에 균등하게 분배해야 한다. 비효율적인 분배는 오히려 성능 저하를 초래할 수 있다.
3). 프로그래밍 복잡성 : 병렬 처리를 위한 프로그램을 개발하는 것은 순차적 프로그램 개발보다 복잡하고 어렵다.
클라우드 컴퓨팅(Cloud Computing)은 인터넷을 통해 서버, 저장 공간, 데이터 베이스, 네트워킹, 소프트웨어와 같은 컴퓨팅 서비스를 제공하는 기술이다. 사용자는 필요에 따라 이런 리소스를 언제든지 접근하고 사용할 수 있으며, 사용한 만큼의 비용을 지불한다. 이를 위해선 기업이나 개인이 자체적으로 인프라를 구축하고 유지 관리해야 한다.
클라우드 컴퓨팅의 주요 서비스 모델
1). IaaS (Infrastructure as a Service) : 가상화된 컴퓨팅 리소스를 인터넷을 통해 제공한다. 가상 서버, 스토리지 등이 이에 해당한다.
2). PaaS (Platform as a Service) : 애플리케이션 개발 및 배포를 위한 플랫폼을 제공한다. OS, 개발 도구, 데이터 베이스 관리 시스템 등 개발에 필요한 환경을 클라우드로 제공한다.
3). SaaS (Software as a Service) : 인터넷을 통해 소프트웨어 애플리케이션을 제공한다. 사용자는 별도의 설치 없이 소프트웨어를 사용할 수 있으며, 소프트웨어의 관리 및 유지 보수는 서비스 제공자가 담당한다.
Cloud Computing
장점
1). 유연성 : 사용자의 요구사항에 따라 리소스를 확장하거나 축소할 수 있음.
2). 비용 절감 : 컴퓨터를 사용하기 위해 필요한 것은 인터넷 환경뿐이므로, 컴퓨터를 구성하는데 필요한 비용을 절감할 수 있다.
3). 접근성 : 인터넷이 연결되어 있다면 어디서든 서비스에 접근할 수 있다.
4). 신속성 : 클라우드 서비스는 몇 분 내에 설정하고 사용할 수 있다.
한계점
1). 보안 : 데이터가 외부 클라우드 서버에 저장되므로, 보안 및 개인정보 보호가 중요한 문제이다.
2). 규정 준수 : 클라우드 서비스는 특정 산업이나 국가의 규제에 따라야한다.
3). 종속성 : 사용자는 클라우드 서비스 제공자의 기술이나 환경, 인프라에 종속된다.