* 시스템 소프트웨어
- 사용자가 하드디스크에 있는 파일 조작 시 사용자가 직접 처리 않고 이를 대신 처리하는 P/G
- 컴퓨터 HW를 실제로 운용하는 P/G
- P/G을 메모리에 적재하거나 인터럽트 관리, 기억장치 관리 등 역할
시스템 소프트웨어 | 개념 |
운영 체제 (Operation System) |
- HW와 SW 자원 관리하고 컴퓨터 P/G 위한 공통 서비스 제공하는 P/G |
어셈블러 (Assembler) |
- 어셈블리어 --> 기계어로 변환해주는 P/G |
컴파일러 (Compiler) |
- 고급언어로 작성한 원시 P/G을 기계어인 목적 P/G으로 바꾸어 주는 P/G |
인터프리터 (Interpreter) |
- 고급 언어나 코드화된 중간 언어 입력받아 목적 P/G 생성 없이 직접 기계어 생성하여 실행시켜 주는 P/G |
전처리기 (Preprocessor) |
- 원시 P/G 번역 전에 미리 언어 기능 확장한 원시 P/G 생성하는 시스템 P/G - 예) C언어 #include문 |
링커(Linker) | - 서로 독립적으로 작성되고 번역된 목적 P/G 호출 및 연계시키는 시스템 P/G |
로더(Loader) | - 실행 파일을 주기억장치에 적재하여 실행하도록 해주는 시스템 P/G |
- 실행 과정
용어 | 설명 |
컴파일 | - 사람이 작성한 P/G 고급언어를 기계어로 번역하는 과정 |
링킹 | - 기계어(목적 P/G)가 필요한 라이브러리들 연결하여 하나의 실행 P/G 생성하는 과정 |
로딩 | - 외부 기억장치로부터 실행 P/G을 주기억장치에 적재, CPU 실행 가능케 하는 과정 |
고급언어 | - 사람들이 이해하기 쉽게 만든 프로그래밍 언어 - 포트란, 코볼, C, 자바, C#, C++ 등 |
어셈블리어 | - 기계어의 명령부와 번지수를 사람이 이해하기 쉬운 기호로 1:1 대응 시킨 프로그래밍 언어 |
기계어 | - 컴퓨터가 직접 읽을 수 있는 2진수로 이루어진 언어 |
- 컴파일러와 인터프리터
- 컴파일러에 의한 목적 코드 생성이란 고급언어로 작성한 소스 코드 입력 받아 실항할 수 있는 기계어 명령어 담은 파일을 출력물로 만드는 과정
- 컴파일러 단계
- 컴파일러에 의해 어휘 분석(Lexical Analysis, 일종의 Parsing 기능) 통해 코드 분해
- 분해된 코드로 심볼 테이블 생성하여 문법 검사 후 최적화
- Error Recovery : error가 다른 문장에 영향 없도록 수정
- 목적 코드 생성
단계 | 설명 |
Lexical Analyzer (어휘 분석) |
- 컴파일러 내부에서 효율적이며 다루기 쉬운 정수로 변경 - 원시 P/G 입력 문자열을 읽어 블랭크 제거 - 각 단어 분리하여 토큰으로 내부 단위 구성 |
Syntax Analyzer | - 토큰 문법적 오류 여부 확인 Tokens ▶ Parser ▶ Trees |
Intermediate Code generator (의미 분석) |
- 논리에 맞는 의미 부여 - 의미상 잘못된 부분 찾아냄 |
Code Optimizer | - 비효율적 코드 구분하여 더 효율적인 코드로 변경 |
Target Code Generator | - 중간 코드로부터 기계가 이해하는 명령어 생성 |
구분 | 컴파일러 | 인터프리터 |
장점 | - 실행 효율성, 성능, 안정성 좋음 - 반복적 호출되는 P/G은 한번 번역으로 빠르게 실행 가능 |
- 이식성, 유지보수성 - 사용자 융통성과 디버깅 용이 |
단점 | - 기억장소 필요 - 목적 코드 용량 큼 |
- 수행시간 느림 |
사용 언어 | - 포트란, 파스칼, 코볼, C | - Visual Basic, LISP, APL, 자바 |
- 링커와 로더
- 링커의 역할
- 서로 독립적으로 작성 및 컴파일 된 목적 P/G 연계시키는 시스템 P/T
- 링커는 여러 목적 코드와 라이브러리 코드 단위(Code Chunk) 하나로 묶어 실행 가능한 하나의 실행 파일 생성
- 링커는 P/G에서 참조하는 다양한 모듈을 실행 가능한 단위로 통합하는 과정
- 링크 시 연결된 모듈은 사용자가 지정하거나 라이브러리로 주어짐
- 로더의 역할
- 외부 기억장치로부터 실행 프로그램을 주기억장치로 옮기기 위해 메모리 할당, 연결, 재배치와 적재 담당하는 시스템 P/G
- 커널에 있는 로더가 실행 파일과 라이브러리 파일을 가상 메모리에 로딩
- 링커의 역할
동작 | 구분 | 설명 |
Allocation (주기억장치 할당) |
정의 | - P/G 수행에 필요한 기억장소 할당 받는 기능 |
방법 | - P/G 실행 시 필요한 부분 기억장치에 할당 | |
Linking (링킹) |
정의 | - 실행 중인 여러 P/G이 라이브러리나 특정 모듈 공유토록 P/G 적재 시 링크하는 기능 |
방법 | - 링킹 로더는 링커에 의해 제공된 목적 파일 재배치 정보 통해 실행 가능한 코드 만들어 주기억장치에 적재 | |
Relocation (재배치) |
정의 | - P/G 내 재배치 가능한 상대주소를 할당된 메모리 절대주소로 변환하는 기능 |
방법 | - 목적 코드 각 명령에 대해 재배치 여부 명시하는 재배치 비트 추가하여 표시 | |
Loading (적재) |
정의 | - Allocation, Linking, Relocation 작업이 수행된 P/G을 주기억장치에 적재하는 기능 |
방법 | - 로더의 Allocation 방법에 의거해 필요한 기능 수행 |
로더 메모리 배치 유형 | 설명 |
컴파일 즉시 로더 (Compile-and-go Loader) |
- 가장 간단한 방법 - 번역기가 로더 역할까지 담당 - 로더 기능은 단순히 실행 제어 - 어셈블러 재번역 요구 - 서로 다른 언어로 작성된 모듈 간 연결 불가 |
절대 로더 (Absolute Loader) |
- 출력 결과는 보조기억장치에 저장 - 기계어에서 미리 지정한 번지에 P/G과 데이터 직접 적재 - 프로그래머가 어셈블러에게 적재주소 지정 |
재배치 로더 (Relocation Loader) |
- 적재 모듈 주기억장치에 적재 - 상대주소를 절대주소로 변환 - 로드 과정에서 메모리의 적당한 영역 찾아서 로드 |
링킹 로더 (Linking Loader) |
- 재배치 링크 및 적재 일괄 수행 - 두 단계의 패스로 구성 - 패스 1 : 모듈에 기억장소 할당, 외부 기호 주소 확정, 외부 기호표 작성 - 패스 2 : 모든 상대주소를 절대주소로 변환, 외부 기호표 참조 후 적재 |
동적 로더 (Dynamic Loader) |
- 재배치 로더와 링킹 로더 단점 보안 - CPU가 현재 사용 중인 부분만 선택적 로드 - 미사용 중인 P/G은 보조 기억장치에 저장 - 서브 루틴 상호 호출 관계 파악 - Load-on-call과 동의어 |
적재 기억장소 선정 기법 | 내용 |
절대 번지 선정법 (Absolute Address Allocation) |
- 특별한 정책 없이 실행 코드의 절대번지 영역을 적재 공간으로 선정 - 초기 컴퓨터에서 사용, 단일 P/G만 수행 |
최대 공간 선정법 (Largest Fit Allocation) |
- 적재 가능한 메모리 공간 중 가장 큰 공간 선정 - 매우 간단한 알고리즘이나 메모리 낭비 심함 |
순차 공간 선정법 (Sequential Fit Allocation) |
- 적재 가능한 공간 중 하위 메모리 영역 우선 배정 - 메모리 편중이 심함 |
최적 공간 선정법 (Best Fit Allocation) |
- 적재 가능한 공간 중 최소 공간 선정 - 메모리 효율 높일 수 있으나 항상 빈 공간에 대한 모니터링 필요 |
- 어셈블리어와 어셈블러
구분 | 설명 |
어셈블리어 | - 기계어 명령부(연산코드)와 번지수(오퍼랜드)를 사람이 이해하기 쉽게 일대일 대응시켜 기호화한 프로그래밍 언어 - 어셈블러로 번역 시 기계어와 일대일 대응 예) LOAD X Y, ADD X Y, STOR X Y 등 - 크로스 어셈블러 : 다른 컴퓨터 이용하여 어셈블리어 P/G을 이식(porting)하려는 CPU 기계어로 번역하는 P/G |
어셈블러 | - 어셈블리 P/G을 기계어 P/G으로 번역하는 SW - 니모닉스(mnemonics) : 어셈블리 명령어가 지정하는 연산 가리키는 알파벳 기호 예) 'LOAD', 'ADD', 'STOR' 등 |
기계어 | - 컴퓨터가 직접 읽을 수 있는 2진수로 이루어진 언어 - 컴퓨터 HW 설계에 따라 정의 예) 00100101 - 연산코드(OP Code)와 오퍼랜드(Operand)로 구성됨 - 연산코드 : CPU가 수행할 연산 지정해주는 비트들 - 오퍼랜드 : 연산에 사용될 데이터 혹은 데이터가 저장된 기억장치 주소 |
- 명령어
구분 | 설명 |
데이터 전송 명령어 | - 데이터를 메모리에서 레지스터 또는 메모리, 레지스테에서 메모리 또는 레지스터로 이동하는 명령어 예) LOAD, STORE, MOVE, PUSH |
산술 연산 명령어 | - ADD, SUB, MUL, DIV 등 |
논리 연산 명령어 | - AND, OR, NOT, XOR 등 |
시프트 명령어 | - 레지스터에 저장된 데이터 비트들을 이동하는 명령어 |
분기 명령어 | - 다음에 실행할 명령어 새롭게 지정하는 명령어 예) JUMP, CALL, RETURN |
- 명령어 구조
- 0-주소명령어 [연산코드] (예 : PUSH, POP)
- 1-주소명령어 [연산코드][오퍼랜드] (예 : ADD A)
- 2-주소명령어 [연산코드][오퍼랜드1][오퍼랜드2] (예 : ADD A, B)
- 3-주소명령어 [연산코드][오퍼랜드1][오퍼랜드2][오퍼랜드3] (DP : ADD A, B, C)
- 연산 코드에슨 명령어가 위치하며, 오퍼랜드에는 기억장치 주소, 레지스터 번호, 사용할 데이터 등 위치
- 1-주소명령어는 누산기(Accumulator) 이용해서 명령어 처리
구분 | 설명 |
POP | - 스택에 저장된 값 꺼냄 |
PUSH A | - A에 저장된 값 스택에 삽입 |
MOVE R, A | - A에 저장된 값 R로 전송 |
ADD R, A, B | - A와 B 더해서 R에 저장 |
- 명령어 수행 과정(Instruction Cycle)
- 인출(Fetch Instruction) - 해독(Decode Instruction) - 실행(Execute Instruction) - 저장(Write Back) 순서로 구성
- 간접 사이클 : 피 연산 데이터가 있는 기억장치 유효 주소 계산하여 레지스터(고속 임시 기억장치)에 적재 과정
단계 | 설명 |
명령어 인출 | - IF(Instruction Fetch) stage - 명령어 기억장치로부터 인출 |
명령어 해독 | - ID(Instruction Decoding) stage - 인출된 명령어 해석 |
명령어 실행 | - EX(Instruction Execution) stage - 해석된 결과 수행 |
데이터 저장 | - WB(Write Back) stage - 수행된 결과 저장 |
- 파이프라인(Pipeline)
- 단위 시간 내 하나 이상의 명령어 처리함으로써 성능 증가시키는 멀티 프로세스 환경에서의 명령어 처리 메커니즘
- 명령어 처리 과정을 여러 단계로 세분화하여 단계마다 다른 작업 중첩 수행하여 병렬성 극대화
유형 | 설명 |
단일 파이프라인 |
- 명령어 수행 과정에서 각 단계 한 번만 중첩하여 다수 동작을 동시에 수행하는 병렬처리 기술 |
슈퍼 파이프라인 |
- 하나의 파이프라인 여러 부분으로 나누어 연속적인 흐름으로 중첩하여 처리, 성능 향상시키는 병렬처리 기술 - 각 명령어 수행 단계를 두 개 이상으로 분할한 구조 |
슈퍼 스칼라 |
- CPU 내 파이프라인 된 ALU(CPU 내 산술연산장치) 여러 개 포함하여 매 사이클마다 다수 명령어들이 동시에 실행하는 병렬처리 기술 예) 1개 cycle에 정수 연산 2개, 실수 연산 4개 동시 수행 |
슈퍼 파이프라인드 슈퍼 스칼라 |
- 슈퍼 스칼라 기법에 슈퍼 파이프라이닝 기법 혼합하여 적용 - 수행시간 더욱 단축한 기법 |
VLIW (Very Long Instruction Word) |
- 동시에 수행될 수 있는 명령어들 컴파일러 수준에서 추출, 하나의 명령어로 압축하여 수행하는 병렬처리 기술 - EPIC 기법 : 컴파일러가 소스 코드로부터 명시적 병렬성을 찾아 병렬처리가 가능토록 기계어 코드 생성, 병렬 수행됨 - FI, DI는 한 회로에서 수행 - EI(실행 사이클)만 여러 개 기능 UNIT에 분할 수행 |
구분 | 슈퍼 파이프라인 | 슈퍼 스칼라 | VLIW |
명령어 해독 | 별개 해독, 동시 인출 | 별개 해독, 동시 인출 | 하나의 회로에서 인출, 해독 |
명령어 밀도 | 클럭 주파수에 좌우 | ALU 수에 좌우 | 병렬성에 따라 좌우 |
병렬성 검출 | 실행 시 | 실행 시 | 컴파일 시 |
문제점 | 명령어 병렬성에 따라 성능 좌우 |
유형 | 설명 |
파이프라인 | - 명령어 단위 수행시간은 변하지 않고, 단위시간 내 수행되는 명령어 수를 늘림으로써, 수행시간 단축시키는 설계 방식 |
멀티프로그래밍 | - 시스템에서 여러 P/G있을 때 한 P/G이 프로세서 짧은 시간 동안 차지하여 작업 수행시키고, OS가 다음 P/B 수행되도록 하는 방식 |
벡터프로세싱 | - 하나의 벡터 처리기로 여러 자료 동시에 처리하는 수평적 병렬처리 |
멀티프로세싱 | - 주 프로세서(master CPU)가 시스템 모든 작업 관리하도록 설계되고, 다른 프로세서(slave CPU)는 주 프로세서가 부여한 일 수행 |
SMP (Symmetric Multiprocessing) |
- 두 개 또는 그 이상 프로세서가 한 개 공유된 메모리 사용하는 다중 프로세서 컴퓨터 아키텍처 |
MPP (Massive Parallel Processing) |
- 한 시스템 내 P/G을 여러 부분으로 나누어 다수 프로세서가 효율적으로 함께 작동하는 네트워크 이용 방식 |
구분 | SMP | MPP | NUMA |
의미 | 시스템 버스와 같은 인터커넥션 통해 프로세스, 메모리, IO 등 시스템 자원 균등하게 공유하는 구조 | 개별 프롯스, 메모리 IO 등 시스템 자원 가지는 노드들을 독립된 상호 연결로 결합한 구성 | 복수 개 CPU 보드를 연결하여 통합된 멀티 프로세서 시스템 만드는 구조 |
OS | 표준 개방형 OS 지원 | 표준 개방형 OS 미지원 | 표준 개방형 OS 지원 |
구성 | 하나의 OS 커널 존재 | 각 노드별로 OS 커널 존재 | 글로벌 메모리 공유 방식 |
320x100
'정보처리기사 > 필기' 카테고리의 다른 글
[정보처리기사] Part04-01-2. 공통 모듈 구현 (0) | 2022.02.10 |
---|---|
[정보처리기사] Part04-01-1. 개발환경 구축 (0) | 2022.02.10 |
[정보처리기사 필기 요약] 프로그램 개발 언어 (객체지향, 선언형) (0) | 2021.03.04 |
[정보처리기사 필기 요약] 배치 프로그램 (0) | 2021.03.04 |
[정보처리기사 필기 요약] 소프트웨어 개발 보안 (0) | 2021.03.04 |
댓글