1. 컴퓨터 시스템과 하드웨어
1) 컴퓨터 시스템 계층 구조
- 응용 소프트웨어 - 운영체제 - 컴퓨터 하드웨어
- 계층 구조의 특징
- 사용자는 응용프로그램을 통해 컴퓨터 활용
- 하드웨어는 모두 운영체제의 배타적 독점적 지배를 받음
- 사용자나 응용프로그램의 하드웨어 직접 접근 불허
- 사용자가 하드웨어에 대해 몰라도 컴퓨터 사용 가능
2) 컴퓨터 하드웨어
(1) CPU
- 프로그램 코드, 기계명령을 해석하여 실행하는 중앙처리장치
- 컴퓨터의 가장 핵심으로 전원 공급시 동작하며 메모리에 적재된 프로그램 실행
(2) 메모리
- cpu에 의해 실행되는 프로그램 코드와 데이터가 적재되는 공간
- 실행되기 위해 반드시 메모리에 적재되어야 함
(3) 캐시 메모리
- cpu 처리속도의 빠른 발전으로 대기시간 증가 → 캐시 메모리로 cpu 실행 속도를 높임
- 온칩 / 오프칩 메모리
- 온칩 메모리(on-chip) : cpu 내부에 설치되는 캐시 메모리
- 오프칩 메모리(off-chip) : cpu 외부에 설치되는 캐시 메모리
(4) 버스
- 하드웨어들이 데이터를 주고 받기 위해 디지털 신호가 지나는 여러 선의 묶어 부르는 용어
- 버스의 종류
- 주소 버스 : 주소 신호가 지나다니는 버스
- 데이터 버스 : 데이터 신호가 지나다니는 버스
- 제어 버스 : 제어 신호가 지나다니는 버스
- 주소
- 메모리나 입출력 장치나 저장 장치 내에 있는 저장소에 대한 번지
- cpu는 메모리나 입출력 장치에 값을 쓰거나 읽을 때 반드시 주소를 발생시킴
- 목적에 따른 버스 구분
- 시스템 버스 : cpu, 캐시 메모리, 메모리 등 처리가 빠른 하드웨어들 사이 신호 전송
- 입출력 버스 : 상대적으로 느린 입출력 장치들로부터 입출력 데이터 전송
3) CPU와 메모리의 관계
- 32비트 cpu = 32비트 운영체제 = 32비트 컴퓨터
- cpu에 32개의 주소선
- cpu가 액세스 하는 주소 범위 : 0 ~ 2^32-1번지
- cpu가 최대 액세스 가능한 메모리 크기 : 4GB
- 32비트 CPU를 가진 컴퓨터에는 4GB 이상의 메모리를 달아도 소용없음
- cpu 입출력되는 32개의 데이터 선
4) 명령
- cpu가 해석하고 실행할 수 있는 기계 명령
- cpu마다 명령 이름, 기계어 코드, 개수 등이 다름
(1) 명령 처리 과정
- cpu 레지스터
- PC(Program Counter) : 다음에 실행할 명령의 메모리 주소 저장
- IR(Instuction Register) : 현재 실해하기 위해 메모리로부터 읽어 온 명령 저장
- SP(Stack Pointer) : 스택의 맨 위 메모리 주소 저장
- 데이터 레지스터 : 연산에 사용될 데이터들을 저장
- 상태 레지스터 : cpu의 상태 정보나 인터럽트 금지 등의 제어 정보 저장
- 명령어 사이클
- cpu가 하나의 명령을 실행하는 과정
MOV EAX, [300] ; 메모리 300번지의 값을 읽어 EAX 레지스터에 저장
- cpu는 PC레지스터가 가리키는 주소를 주소 버스에 실음
- 메모리는 주소 버스가 가리키는 주소 번지에 저장된 데이터를 데이터 버스에 실음
- cpu는 데이터 버스에 담긴 바이너리 값들은 IR레지스터에 저장, PC는 다음 번지로 수정
- cpu는 연산에 필요한 데이터를 읽기위해 데이터의 주소를 주소 버스에 실음
- 메모리는 데이터 버스가 가르키는 주소의 값을 데이터 버스에 실음
- cpu는 데이터 버스로부터 값을 임시 데이터 레지스터에 저장
- cpu는 명령을 해석하고 명령 실행
5) 스택의 위치
- 프로그램이 실행되기 위해 운영체제에 의해 할당
- 코드 공간 : 프로그램 코드 적재
- 데이터 공간 : 전역 변수들이 적재
- 힙 공간 : 프로그램에서 동적으로 저장할 데이터를 위한 공간
- 스택 공간 : 함수가 호출될 때 매개 변수, 지역 변수 등을 저장하는 공간
- 스택
- 별도의 하드웨어 메모리가 아닌 메모리의 일부를 사용
- 각 프로그램에게 자신만의 스택 공간 할당
6) 컨텍스트 (Context)
- 프로그램이 실행 중인 일체 상황 혹은 상황 정보
- 메모리 - 프로그램 코드와 데이터, 스택, 동적할당 받아 저장한 값
- cpu 레지스터들의 값
- 컨텍스트 스위칭
- 현재 실행 중인 프로그램의 컨텍스트를 저장
- 다른 프로그램의 저장된 컨텍스트를 cpu에 복귀
- → 현재 프로그램을 중지하고 다른 프로그램을 실행할 때 발생
7) 멀티 코어 CPU
- cpu 내부에 2개의 프로세서 포함
- 2개의 프로그램 동시에 실행
- 코어는 과거의 cpu와 동일 → 프로그램을 완벽히 처리 가능
2. 컴퓨터 시스템과 운영체제
1) 컴퓨터 시스템 계층 구조 설계 이유
- 계층간 독깁성 확보
- 사용자는 하드웨어를 몰라도 응용프로그램을 통해 컴퓨터 활용
- 컴퓨터의 하드웨어의 타입이나 구조, 제어 방법을 몰라도 응용프로그램 개발 가능
- 하드웨어의 변경으로 다시 개발해야할 필요 없음
2) 운영체제의 필요성
- 운영 체제가 없을 경우 응용프로그램이나 사용자가 직접 하드웨어를 제어해야함
- 또한, 하드웨어에 대한 지식, 충돌, 보안, 관리 등의 문제 발생
(1) 운영체제의 필요성
- 자원에 대한 충돌 해결, 성능 최적화, 사용자의 시스템 효율화
3) 운영체제와 응용프로그램
- 응용프로그램 : 워드, 웹브라우저 등 사용자가 컴퓨터를 활용하도록 작성된 다양한 프로그램
- 응용프로그램에 대한 운영체제의 역할
- 응용프로그램이 직접 하드웨어를 다루지 못하도록 차단 → 하드웨어 사용 충돌을 막음
- 하드웨어 사용이 필요 → 운영체제를 통해 하드웨어 조작 (시스템 호출)
- 응용프로그램 실행 순서 제어, 응용프로그램들 사이의 통신 중계
4) 운영체제와 사용자
- 사용자는 응용프로그램을 통해 컴퓨터 활용
- 사용자에 대한 운영체제의 역할
- 사용자가 하드웨어 지식이 없어도 컴퓨터 활용이 가능
- 하드웨어 설치나 변경에 도움을 줌
- 편리한 인터페이스 제공
- 컴퓨터 사용을 돕는 도구 프로그램 제공
- 사용자 계정 관리
- 사용자의 통계
5) 운영체제와 하드웨어
- 하드웨어 제어는 운영체제의 몫
- 운영체제는 사용자/응용프로그램과 하드웨어 사이의 매개체
6) 운영체제 기능
- 프로세스와 스레드 관리
- 프로세스/스레드의 실행, 일시 중단, 종료, 스케줄링, 컨텍스트 스위칭, 동기화
- 메모리 관리
- 메모리 할당, 반환, 다른 프로세스/스레드로부터 메모리 보호
- 하드 디스크의 영역까지 사용하는 가상 메모리 기술
- 파일 관리
- 파일 생성, 저장, 읽기, 복사, 삭제, 이동, 파일 보호
- 장치 관리
- 하드웨어에 대한 장치 제어
- 사용자 인터페이스
- 네트워킹
- 네트워크 인지, 연결, 닫기, 데이터 송수신
- 보안
- 바이러스나 웜, 멀웨어, 해킹 등의 외부 공격이나 무단 침입으로부터 보호
7) 운영체제 구성
- 운영체제는 커널 + 툴 + 디바이스 드라이버
- 커널 (좁은 의미의 운영체제)
- 운영체제의 핵심, 부팅 후 메모리에 상주하는 코드와 데이터
- 커널 기능을 이용하려면 반드시 시스템 호출 사용
- 도구 소프트웨어와 GUI
- 사용자가 컴퓨터를 편리하게 사용할 수 있도록 제공하는 도구프로그램
- 디바이스 드라이버
- 장치를 직접 제어하고 입출력하는 소프트웨어
8) 운영체제 커널 인터페이스
- 커널이 제공하는 2개 인터페이스 : 시스템 호출 / 인터럽트
- 시스템 호출
- 커널과 응용프로그램 사이의 인터페이스
- 응용프로그램에서 커널 기능을 사용하는 유일한 방법
- 인터럽트
- 커널과 하드웨어 장치 사이의 인터페이스
- 장치들이 입출력 완료, 타이머 완료 등을 cpu에 알리는 하드웨어적 방법
- cpu는 하는 일을 중단하고 인터럽트 서비스 루틴 실행
3. 커널과 시스템 호출
1) 응용프로그램의 자원 접근 문제
- 응용프로그램이 직접 컴퓨터 자원에 접근하면 충돌과 훼손 발생
- → 응용프로그램의 자원 접근 불허
- 자원 접근은 커널만 허용
- → 메모리 공간을 사용자 공간과 커널 공간으로 분리
- 응용프로그램은 사용자 공간, 커널은 커널 공간에만 적재
- 시스템 호출을 통해 커널 코드 이용
- → cpu의 실행 모드를 사용자 모드와 커널 모드로 분리
- 응용프로그램은 사용자 모드, 커널 코드는 커널 모드에서만 실행
- 사용자 모드서 커널 코드 접근 시 강제 종료
2) 사용자 공간과 커널 공간
- 사용자 공간: 모든 응용프로그램들이 나누어 사용하는 공간
- 커널 공간 : 커널만 사용할 수 있는 공간
- 커널 코드와 데이터를 악이적인 사용자, 응용프로그램이나 코딩 실수로부터 보호
- 사용자 공간 크기 : 한 응용프로그램의 최대 크기
- 프로그램 코드 + 데이터 + 동적할당 + 스택을 합친 크기
- 사용자 공간 크기가 2GB일 경우 응용프로그램의 최대 크기는 2GB
3) 가상 주소 공간
- 주소 공간 : 사용자 공간 + 커널 공간
- 물리 메모리 주소 범위와 무관한 가상 주소 공간을 사용
- 사용자나 응용프로그램 관점에서 보는 주소 범위로 전체 메모리를 사용하고 있다고 착각
4) 사용자 모드와 커널 모드
- CPU는 둘 중 하나의 모드로 실행
- 사용자 모드
- cpu는 사용자 공간에 있는 코드나 데이터 액세스
- cpu는 커널 공간 접근 불가
- 특권 명령 실행 불가
- 커널 모드
- cpu가 커널 공간에서 실행 중 (사용자 공간도 실행 가능)
- 특권 명령 실행 가능
- 사용자 모드서 커널 모드로 변경되는 경우
- 시스템 호출과 인터럽트 발생
5) 특권 명령
- 커널 모드에서 실행할 특별한 목적으로 설계된 CPU 명령
- 종류
- I/O 명령 : 하드웨어 제어 및 장치로부터의 입출력
- Halt 명령 : cpu의 작동을 중지시키는 명령
- 인터럽트 플래그 on/off
- 타이머 설정 명령
- 컨텍스트 스위칭 명령
- 메모리 지우기 명령
- 장치 상태 테이블 수정 등의 명령
6) 실행 모드와 관한 이슈
- 실행모드는 cpu의 기능
- 모드를 구분하여 작동시키는 이유는 커널 공간의 보호
- 시스템 호출을 통해 커널 코드를 사용하므로 응용프로그램을 직접 커널 코드 호출 불가
- cpu는 평균적으로 커널 모드에서 많이 실행
7) 커널
- 커널은 부팅 시에 커널 공간에 적재된 함수들과 데이터의 집합
- 커널은 단순 함수들의 집합으로 시스템 호출을 통해 호출 → 프로세스는 아님
- 커널은 스택이나 힙을 가지지 않으며 스레드를 위한 스택이 커널 공간에 생성
- → 커널은 스스로 실행되는 코드(프로세스)가 아님
8) 응용프로그램 빌딩
- 라이브러리
- 응용프로그램에서 활용하도록 미리 함수들을 작성하여 컴파일하고 바이너리 형태로 만든 파일
- 응용프로그램이 활용하는 라이브러리 유형 2가지
- 표준 라이브러리 - 사용자가 작성하기 힘든 함수 제공
- 시스템 호출 라이브러리 - 시스템 호출을 진행하여 커널 모드로 진입하고 커널에 만들어진 함수 실행
9) 함수 호출과 시스템 호출
- 함수 호출
- 사용자 공간에 적재된 함수가 다른 함수나 라이브러리 함수 호출
- 사용자 공간의 스택에 돌아올 주소, 매개변수 전달, 호출된 함수의 지역변수 생성
- 호출된 함수가 끝나면 함수를 호출한 곳으로 복귀
- 시스템 호출
- 응용프로그램이 운영체제의 기능을 사용하려고 하는 경우
- 시스템 호출을 일으키는 특별한 기계명령 실행
- 커널의 시스템 호출 핸들러 실행
10) 시스템 호출
- 사용자 공간의 코드에서 커널 서비스를 요청하는 과정
- 시스템 호출 라이브러리 제공
- 시스템 호출을 일으키는 기계 명령
- cpu마다 시스템 호출을 실행하는 특별한 기계 명령 제공
- 라이브러리를 통해 간접적으로 시스템 호출이 이루어짐
- 응용프로그램 → 표준 라이브러리 함수 → 시스템 호출 라이브러리의 시스템 함수 호출 → 시스템 호출 cpu 명령
- 시스템 호출 비용
- 함수 호출 fread와 시스템 호출 read 비교
- 시스템 호출은 많은 시간 비용
- read를 여러번 호출 시 프로그램 실행 속도 저하
- 함수 호출 fread와 시스템 호출 read 비교
4. 운영체제와 인터럽트
1) 인터럽트
- cpu가 현재 일을 중단하고 다른 일을 하도록 시키는 비동기적 방법
- 하드웨어 인터럽트 : 장치들의 상황 발생을 cpu에게 알리는 하드웨어 신호
- 소프트웨어 인터럽트 : cpu 명령어에 의해 하드웨어 인터럽트를 수신한 것과 동일한 처리
- 인터럽트 발생 → cpu는 인터럽트 서비스 루틴 실행
2) 인터럽트 서비스 루틴과 운영체제
- 인터럽트 서비스 루틴 : 디바이스 드라이버나 커널 코드에 위치
- 다중프로그래밍을 위해서는 인터럽트가 필요
- 여러 프로세스를 동시에 실행
- 한 프로세스가 입출력 시행시 다른 프로세스로 교체 실행
- 입출력 완료될 때, 장치로부터 입출력 완료 통보 필요 → 인터럽트
- 입출력이 완료되었는지 계속 검사하는 폴링보다 효율적
- 인터럽트의 효과
- 입출력 장치와 cpu가 동시에 각자 작업 실행
- 컴퓨터 시스템의 효율적 작동 → cpu 활용률 증가 및 시스템 처리율 상승
'Computer Science > Operating System' 카테고리의 다른 글
First Come First Served (FCFS) 구현 (0) | 2023.07.11 |
---|---|
[운영체제] CPU 스케줄링 (0) | 2023.07.11 |
[운영체제] 스레드와 멀티스레딩 (0) | 2023.07.10 |
[운영체제] 프로세스와 프로세스 관리 (1) | 2023.07.09 |
[운영체제] 운영체제의 시작과 발전 (0) | 2023.07.07 |