운영체제란 무엇인가?
프로그램은 하드웨어 위에서 돌아간다. 사용자가 이를 전부 관리하면서 프로그램을 실행하기엔 너무나 귀찮고 힘들다! 이를 도와주는것이 운영체제.
즉, 컴퓨터 시스템을 편리하게 사용하게 해주고, 하드웨어의 자원을 효율적으로 관리해주는 소프트웨어이다!
운영체제는 항상 메모리에 상주함.
좁은의미 : 커널*
넓은의미 : 유틸리티를 포함한 커널
*커널은 나중에 설명

운영체제의 구조 - 미리보기
운영체제가 하는 일 중, 하드웨어 관리는 당연 1순위로 중요하다.
- cpu 스케줄링 : cpu의 자원을 할당하는 우선순위를 결정한다. 시분할(Time sharing)로 쪼개서 할당함.
- 메모리 관리 : 메모리를 어떻게 쪼개고 할당하고, 삭제할지 결정. 자주 쓰이거나, 최근에 사용됐다면 메모리에서 바로 지우지 않는다.(캐시메모리 관련 내용인듯)
- 파일 관리 : 디스크에 파일을 어떻게 저장할 것인가. 디스크 스케줄링을 해준다. 디스크의 헤드 기준으로 가까운 순서대로 처리한다. 원판이 돌아가야하니까. (ssd가 아닌 hdd 관련 얘기인것같다)
- 입출력 관리 : 입출력장치와 컴퓨터 간에 데이터를 주고받게 해준다. 컴퓨터 구조에서 설명했던 인터럽트를 이용해 처리함.

컴퓨터 시스템 구조
컴퓨터 구조를 간단히 2챕터동안 진행하며 배운다. 앞서 설명했던 컴퓨터 구조와 크게 다른 바 없다.
그래도 첨언하자면
- cpu는 메모리에서 명령을 읽어와 연산하는 작업만 실행한다.
- cpu의 레지스터중 PC(프로그램 카운터)가 있다. 명령을 한번 실행하면, pc의 값이 증가한다. 이 값은 주소를 가리킨다.
- timer는 시분할(time-sharing)구조를 위한 기능이다.
- DMA(Direct Memory Access)는 입출력장치가 메모리에 바로 엑세스하기 위한 장치이다.
- mode bit은 1,0으로 나타내며 1일땐 사용자 모드. 0일땐 os모드(사용자 접근불가). 입출력작업을 하려면 modeBit이 0일때만 가능.

동기와 비동기식 입출력

JS에서 사용하는 async, await 기능과 비슷하다!
- 동기식 입출력 : 입출력장치를 인터럽트해서 명령을 수행 하면 다음작업을 실행.
- 비동기식 입출력 : 입출력 장치를 인터럽트 해놓고, 다른 명령을 수행하다가 입출력장치 명령이 수행되면 실행!
프로그램 실행단계
바로 메모리에 올라오는것 이 아닌, 보조기억장치의 가상 메모리에 적재됨.
그리고 swap area를 거쳐, 진짜 메모리에 올라온다.

유저-커널 모드를 반복하며 실행한다!
- 시스템 콜 : 프로그램이 커널모드에 요청하는것

출처 :http://www.kocw.net/home/search/kemView.do?kemId=1046323