입출력(I/O)란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고받는 것을 말함
입출력 방식은 동기식 입출력, 비동기식 입출력 두가지로 나뉨
각각 자세히 알아 보도록 하자
동기식 입출력
어떤 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 수행함
시나리오
CPU의 명령 수행 속도는 빠르나 입출력 장치에서 데이터를 읽어오는 등의 입출력 연산은 상대적으로 느림
CPU가 아무일도 하지 못하는 자원 낭비가 심한 문제가 있음 (어떻게 해결할 수 있을까?)
하지만 문제가 또 있다.
입출력이 수행 중일 때는 다른 프로그램에게 CPU를 양도하게 되므로 다수의 입출력이 동시에 요청된다. 이 때 동기성을 보장하기 어려운 문제가 생긴다.
예시를 들자면 아래와 같다.
1. A프로그램에서 디스크 '1'이라는 파일의 내용을 3으로 바꾸는 입출력 연산을 요청했다
2. 이 때 연산을 수행 중이던 A의 CPU를 프로그램 B에게 할당했다고 하자
3. B가 공교롭게도 같은 파일을 1증가시키는 작업을 한다
4. 이 때 값은 1 -> 3 -> 4가 아닌 1 -> 2 -> 3이라는 결과를 얻게 된다.
위처럼 예상치 못한 결과를 얻을 수 있기 때문에 입출력 장치 동기화를 위해 각 장치별로 queue를 두어 요청한 순서를 보장할 수 있게 한다.
비동기식 입출력

CPU외에 메모리에 접근이 가능한 장치이다. 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 되는 것을 막아주는 역할을 한다.
DMA를 사용하는 기준에는 데이터 전송량이 큰 경우, 속도와 효율성, 멀티테스킹 및 병렬 처리, 입출력 처리가 있다고 한다.

흔히 사용하는 운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작한다.
이 때 한 프로그램이 다른 프로그램의 실행을 방해하거나 충돌을 일으킬 수 있다.
이 때 하드웨어적인 보안을 유지하기 위해 운영체제는 커널모드 , 유저모드 두 가지 모드를 지원한다.
커널모드
유저모드
운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 이를 거쳐서 호출하도록 설게되었음