Search
💾

[OS] System Structure & Program Execution 2

참고 강의
동기식 입출력(synchronous I/O)
: I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
I/O 장치까지 가서 직접 확인하고 읽어와서 그거를 보고 작업(synchronous read)
I/O 장치에 쓰는 걸 눈으로 확인하고 나서 그 다음일을 실행(synchronous write)
I/O 요청 → device driver → 실제 I/O 장치에서 작업 진행 → 작업물 도착, 인터럽트 발생(device controller) → 다음 작업 실행
CPU가 낭비된다 → CPU를 가지고서 기다리고 있기 때문에
구현 방법
비동기식 입출력(asynchronous I/O)
: I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
I/O 요청 → 바로 CPU 제어권을 얻어서 다른 작업 진행 → 인터럽트 발생(device controller) → 작업 진행
I/O와 무관한 일을 계속 실행한다.
write의 경우에는 비동기식 입출력이 자연스럽다. → 정말 잘 써져있는지 확인할 때에는 Synchronous write 진행
  두 경우 모두 I/O 완료는 Interrupt로 알려줌
  입출력 요청을 해두고 Instruction를 실행할 수 있으면 비동기식 입출력
CPU에서 실행할 수 있는 일반적인 Instruction(왼쪽 그림)
Memory Instruction Memory 따로, I/O를 수행하는 Special Instruction 따로
I/O device도 주소가 있어서 특정 주소 I/O device에 접근 가능
Memory Mapped I/O : 메모리 주소에 연장 주소를 붙여서 접근을 하는 방식(오른쪽 그림)
저장장치 계층 구조
  위로 갈수록 속도가 빠르고, 용량이 적고, 휘발성 매체다.(데이터가 위에 있을수록 시스템의 성능 좋아짐)
CPU에서 직접 접근해서 처리하는 영역 : Primary(Executable)
bit 단위로 접근 가능함 → DRAM
속도 차이를 완충하기 위해서 Cache Memory, Register가 필요, 하지만 용량이 작아서 당장 필요한 것만 밑에서 위로 올려서 사용 : Caching
재사용을 위해서 필요
최근에는 주기억 장치(Main Memory)와 Magnetic Disk 사이에 전자디스크(SSD)영역이 추가됨.
SSD, HDD
CPU에서 직접 접근해서 처리 못하는 영역 : Secondary
Sector 단위로 접근하기 때문에 직접 접근해서 처리 불가
  Data가 계층 사이로 이동하는 것도 I/O인데, I/O하는데 걸리는 시간보다 저장 장치 계층 구성이 시간적으로 절약되고 효율적
프로그램의 실행(메모리 load)
File System에 파일 형태로 저장이 되어 있다가 실행을 시키면 메모리로 올라가서 프로세스가 된다.
→ 중간에 거치는 것이 Virtual Memory
메모리 주소 공간이 만들어지게 된다. → 그 프로그램만의 독자적인 주소 공간(0번지부터 시작하는 독자적 주소 공간)
코드, 데이터, 스택 영역으로 구성
코드 : CPU에서 실행할 기계어 코드
데이터 : 전역 변수, 프로그램이 사용하는 자료구조
스택 : 함수를 호출, 리턴할 때 데이터를 쌓을 때 사용하는 용도
커널이 아닌 주소 공간은 프로그램을 끄면 사라지게 된다.
주소 공간은 메모리에 다 올리지 않는다 → 메모리 낭비
당장 필요한 부분에 해당하는 코드만 올려두고 그렇지 않은 부분은 올리지 않는다.
물리적인 메모리 : 필요한 부분 / Disk Swap Area : 그렇지 않은 부분
사용을 하지 않으면 메모리에서 쫓아냄.
가상 메모리와 물리적 메모리에서의 주소 번지가 다르다. → 주소 변환
주소 변환 계층에서 진행
  File System 하드디스크 : 컴퓨터를 꺼도 사라지지 않음(비휘발성)
  Swap area 하드디스크 : 메모리의 연장 공간을 사용하는 휘발성의 공간
커널 주소 공간의 내용
커널도 하나의 프로그램이기 때문에 code, data, stack으로 구성
Code
자원 관리를 위한 코드, 사용자에게 편리한 인터페이스를 제공하기 위한 코드
인터럽트 처리 코드(함수 형태로 구현), System Call
Data
운영체제가 사용하는 여러 자료구조 정의
하드웨어 관리 통제를 위한 자료구조를 만들어서 관리
프로세서의 독자적인 주소 공간을 관리하기 위한 자료 구조 필요 → PCB(Process Control Block)
시스템안에 프로그램이 돌아가면 그 프로그램을 관리하기 위한 자료구조가 OS 커널에 하나씩 만들어지는데 그게 PCB
Stack
함수 구조로 코드가 구성되어 있기 때문에 함수를 호출하거나 리턴할 때 Stack 필요
사용자 프로그램마다 커널 스택을 따로 두고 있음
사용자 프로그램이 사용하는 함수
모든 프로그램은 함수 구조로 짜여져 있다.
함수
1.
사용자 정의 함수
자신의 프로그램에서 정의한 함수
내가 직접 작성한 함수
2.
라이브러리 함수
해당 기능을 구현해둔걸 가져다가 쓰는 것
자신의 프로그램 안에 포함이 되어 있다.
3.
커널 함수
운영체제 안에서 정의된 함수
프로그램 안에서 가져다가 사용 가능(System Call) → 커널 함수 안에 들어가 있음
프로그램의 실행