-
[시스템]
- 하드웨어(컴퓨터구조)+운영체제
- 시스템 프로그래밍 : 컴퓨터 시스템을 활용하는 SW 개발
========================================================
[시스템 구성요소]
:: 컴퓨터 구조
cpu
캐시
:: 운영체제
메인메모리
하드디스크
========================================================
[하드 웨어]
*입력장치(input unit)
* 중앙처리 장치(CPU) - 제어장치
- 주기억장치 (main memory)
* [보조기억장치] - 논리 연산 장치
* 출력장치(output)
========================================================
cpu :: 중앙처리장치, 연산이 이뤄지는곳
메인메모리 :: RAM, 프로그램 실행방식은 이해하는 것
입출력 버스 :: 데이터 송수신 방식 이뤄지는 곳
========================================================
<cpu>
ALU :: 실질 연산
레지스터 :: 명령, 데이터 저장. 결과도 저장.
컨트롤 유닛 :: 명령해석해서 ALU에 명령전달
버스 인터페이스 :: 버스 통신규약 해석해 데이터,명령 받아옴
하드디스크-> 메인메모리 -> 입출력 버스 -> 버스 인터페이스
-> 레지스터(명령,데이터) -> 컨트롤 유닛, 레지스터
========================================================
:: 클럭신호
- 하드웨어의 동작타이밍을 의미함.
- 요소들의 동기화를 위해, 시스템의 안정성을 위해 필요함.
- 클럭을 높으면 일은 빨라지지만 열이 발생
========================================================
<프로그램 실행과정>
전처리기 > 컴파일러 > 어셈블러 > 링커
전처리기 :: #include. #으로 시작하는 지시자.
컴파일러 :: 프로그래밍 언어를 cpu의 명령어로 번역
어셈블러 :: cpu 명령어를 바이너리 코드(0100)로 번역
링커 :: 바이너리+ 라이브러리 결합해 실행파일 만듬
::Strored Program Concept
- 프로그램이 메모리에 저장이 되는 컨셉으로 만들어야 한다.
- 실행파일의 명령들은 메모리에 저장
- cpu 명령 하나씩 가져가(패치) 해석(디코드) 연산(익스쿠션)
** 실행파일 => 메모리(RAM)
=> 명령 1개 I/O BUS로 이동(패치)
=> 버스인터페이스 => 레지스터 명령 1개 등록 (패치끝)
=> 컨트롤 유닛 명령해석 (디코드)
=> ALU에 명령.실행 (익스쿠션)
========================================================
< I/O BUS > CPU <---BUS--->Memory
- 데이터 버스 :: 데이터 이동
- 어드레스 버스 :: 데이터의 주소정보 이동
- 컨트롤 버스 :: 컨트롤 신호 이동
========================================================
** RAM에서 레지스트로 옮기는 명령어 LOAD
** 레지스트에서 결과를 RAM로 옮기는 명령어 STORE
========================================================
<프로세스 스케줄러> - 여러개의 프로세스를 스케쥴링 하는 것.
<프로세스>
- 메인메모리로 이동하여 실행중인 프로그램
- 프로세스의 범위는 메모리공간+독릭적으로 사용되는 레지스터 셋
- CODE + DATA + HEAP + STACK
* 콘텍스트 스위칭 :: 프로세스 우선순위 변경시,
기존 프로세스의 명령이 있는 레지스트 셋은 메모리에 저장.
새 프로세스 명령을 레스트르 셋에 채움.
* 프로세스 상태
러닝 :: CPU에 의해 실행된 상태(1개)
레디 :: 러닝 준비상태
블럭디드:: I/O 연산중인 프로세스. 연산끝나면 READY
** I/O는 CPU와 독립적인 과정이다. CPU를 안쓴다.
I/O작업이 끝나고 CPU 작업을 할 수 있도록 READY 아닌 BLOCK
========================================================
- 멀티 프로세스를 진행시,
프로세스의 코드,데이터,힙은 공유하되 스택만 분리하자!
<쓰레드>
- 프로세스별 별도의 쓰레드가 있다. (스택영역이 각각 있음)
- OS에 따라 커널에서 스레드를 지원하거나 안하는 것이 있음
- 커널레벨 쓰레드(커널지원) VS 유저 레벨 쓰레드(커널미지원)
** 임계영역 : 둘이상의 쓰레드가 모이면 안되는 코드영역.
:: 스레드의 동기화 - 메모리 접근을 동기화함. 한스레드 한개접근
스레드 접근 순서를 동기화함.
========================================================<언어처리기>
- 컴파일러 : 고급언어를 기계어로 번역해 주는 프로그램
- 어셈블러 : 어셈블리어를 기계어로 번역해 주는 프로그램
- 인터프리터 : 매 명령문마다 기계어로 해석해주는 대화식 프로그램
+) 하이브리드기법 - 고급언어를 중간단계 언어로 번역한 후
소프트웨어로 인터프리팅하는 번역 (Java)
---------------------------------------------------------
<프로그래밍 절차>
1. 문제분석 - 업무 분석, 처리 범위를 정함
2. 입출력 설계 - 입력 자료와 출력 항목 결정
3. 순서도 작성 - flowchart, 해결을 위한 흐름을 기호로 정리
4. 코딩 - 순서도에 따라 프로그래밍 언어로 구현
5. 컴파일, 링크 - 기계어로 번역작업
6. 모의 실행 - 샘플 작업으로 logical error가 있는지 검토.
---------------------------------------------------------'CS' 카테고리의 다른 글
[자료구조] (0) 2020.07.25 [WEB] (0) 2020.06.15 [네트워크] OSI 7계층 과 TCP/IP (0) 2020.06.15