.exe - 프로그램
프로세스 - .exe 를 실행하고 있는 상태 (프로그램을 실행하고 있는 상태)
-> 운영체제는 여러개의 프로세스를 돌리고 있다.
운영체제는 동시적, 병렬적, 혹은 이 둘의 혼합으로 프로세스를 돌린다.
동시성은 프로세스 하나가 Context Switch 를 통해 여러개의 작업을 일부분씩 하는 것.
병렬성은 프로세스 하나에 코어 여러개가 달려서 각각 동시에 작업들을 수행하는 것.
한 프로세스 안에도 여러 개의 작업들이 동시에 진행될 필요가 있다.
-> 여러 개의 Thread들이 여러 개의 작업을 동시에 진행할 수 있다.
프로세스들은 컴퓨터의 자원을 분할해서 쓰지만, 쓰레드들을 프로세스마다 주어진 전체 자원을 함께 사용한다. 속도와 효율 면에서는 낫겠지만, 프로세스에 공유된 자원을 쓰레드 두개가 동시에 공유된 자원에 작업을 하면 오류가 발생할 수도 있다. (오류의 원인을 찾기 힘든 경우도 많다.)
다행히도, 여러 개의 쓰레드를 쉽고, 안전하게 사용할 수 있는 도구, 프로그래밍들이 존재한다.
원시적인 방법의 예시로,
java 의 syncronized 블럭이 있다. syncronized 블럭은 한번에 한 쓰레드만 작업이 가능하기 때문에, 한 프로세스에서 여러 개의 쓰레드가 공유된 자원을 동시에 사용할 때 발생하는 문제들을 방지할 수 있다.
현대의 모든 컴퓨터 시스템의 배경에 실행되고 있는 소프트웨어
운영체제는 소프트웨어와 하드웨어 사이의 소통을 가능하게 하여 전형적인 컴퓨터 시스템을 이루게 한다.
운영체제는 컴퓨터에게 뭘 해야할 지 말할 수 있도록 한다.
운영체제는 "다양한 함수"를 관리한다.
운영체제 없이는 대부분의 컴퓨터는 유저에게 불친절할 것이다.
대부분의 사람들은 운영체제 없이 컴퓨터와 일하는 것이 거의 불가능할 것이다.
1. User Interface
사용자에게 컴퓨터와 소통할 수 있는 방법을 제공한다.
2. File management
3. Management of hardware and peripherals
4. Processor management
5. Running of software
6. Interrupt and error handling
7. Security
8. Memory management
9. Network communication