저는 메일로 한빛 혼공학습단에 대한 안내를 보고 혼공학습단 - 컴퓨터구조, 운영체제에 지원했습니다. 예전에 전공책 살때 가입해놓고 그 이후로 한빛미디어에서 도서 안내 메일이 자주 왔는데 제대로 확인한 적이 별로 없습니다 근데 저때는 관심이 가서 읽어보고 학습을 하면 마일리지까지 준다고 해서 지원하게 되었네요 쓰고보니 뭔가 지원동기가 아름답지 못하네요...
그리고 컴퓨터구조, 운영체제에 대해 복습하려고 생각하고 있었던 계기가 있습니다. 트러블슈팅을 하다 보면 메모리라던지 프로세스 등 운영체제와 관련된 부분들을 특히 많이 접하게 되는데 이해도가 좀 부족한것 같아서 이 부분을 잘 알면 조금 더 효율적으로 접근할 수 있지 않을까 라는 생각도 있었습니다
2. 학습방법
저는 전공자라 아는 내용도 어느 정도 있었습니다 특히 확인 문제는 보기 중에 고르거나 설명 파트에 있는걸 그대로 내는 등 의도적으로 쉽게 내진 것 같더라고요 일단 한 단원씩 쭈욱 읽은 다음에 확인 문제부터 풀어봤습니다 그리고 여유가 되면 더 알아보기나 예제 코드를 살펴 보았습니다
3. 회고
오랜만에 공부를 하니까 새로웠습니다 저는 사실 졸업하고 공부는커녕 책 자체를 잘 안 읽게 되었는데 그래도 커리큘럼 따라가면서 하니까 과제도 다 하고 완주 성공했네요 이 기세를 타서 다른 책도 사서 틈틈히 공부해보려고 합니다
스와핑: 사용하지 않는 프로세스를 보조 기억 장치의 스왑 영역으로 이동시키고 실행할 프로시스를 메모리로 옮김
스왑 영역: 스와핑 발생 시 프로세스가 들어가는 보조 기억 장치의 영역
스왑 아웃: 실행 되지 않는 프로세스를 메모리에서 스왑 영역으로 옯기는 것
(메모리 - > 스왑 영역)
스왑 인: 프로세스를 스왑 영역에서 프로세스로 옮기는 것
(스왑영역 -> 메모리)
스와핑을 활용하면 프로세스에서 요구하는 메모리 주소 공간 크기가 실제 메모리 크기보다 커도 실행이 가능하다.
메모리 할당
최초 적합: 최초로 발견한 빈 공간에 프로세스를 적재
최적 접합: 적재될 수 있는 가장 작은 공간에 프로세스를 적재
최악 적합: 적재될 수 있는 가장 큰 공간에 프로세스 적재
외부 단편화: 프로세스를 할당하기 힘든 작은 메모리 공간으로 인한 메모리 낭비 현상
외부 단편화 해결 방법
1. 압축: 흩어진 메모리 공간을 하나로 압축하는 기법
2. 페이징 기법
페이징: 메모리의 물리 주소 공간을 프레임 단위로 나눔, 논리 공간을 페이지 단위로 자름.
이후 페이지를 프레임에 할당 하는 가상 메모리 관리 기법
페이지 아웃: 페이지 단위로 스왑 아웃 페이지 인: 페이지 단위로 스왑 인
페이지 테이블 베이스 레지스터: 각 프로세스 페이지테이블이 적재된 순서 TLB: 페이지 테이블의 캐시메모리 역할 수행 TLB 히트: CPU가 발생한 논리 주소에 대한 페이지번호가 TLB테이블에 존재(없는 경우 TLB미스)
페이지 폴트: 프로세스가 참조하려는 페이지가 현재 메모리에 로드되어 있지 않을 때 발생
페이지 참조열: CPU가 참조하는 페이지 중 연속된 페이지를 생략한 페이지열 - 페이지 참조열을 알면 페이지 폴트 횟수를 알 수 있다
페이지 교체 알고리즘 1. FIFO 페이지 교체 알고리즘:
- 가장 먼저 메모리에 들어온 페이지부터 내보내는 알고리즘
- 페이지의 향후 참조 가능성을 고려 하지 않음
2. LRU
- 사용 가능성이 낮은 페이지를 우선적으로 내보내는 알고리즘 (가장 오래전에 참조 된 페이지를 내보낸다.)
3. LFU
- 참조 횟수가 가장 적은 페이지를 교체 대상으로 선정하는 알고리즘
4. 최적 페이지 교체 알고리즘
- CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘
- 가장 낮은 페이지 폴트율을 보장하는 알고리즘이다
- 실제로 구현하기는 힘드며 이론상 성능을 평가하기 위한 목적으로 사용
스레싱: 지나치게 빈번한 페이지 교체로 CPU이용률이 낮아 지는 문제
Chapter 15: 파일 시스템
트리 구조 디렉터리: 최상위 디렉터리 및에 여러 서브 디렉터리가 있는 구조 루트 디렉터리: 최상위 디렉터리
절대 경로: 루트 디렉터리에서 자기자신에 이르는 구조 상대 경로: 현재디렉터리에서 시작하는 구조
파티셔닝: 저장장치의 논리적인 영역을 구획 포매팅: 파일 시스템을 설정하여 새로운 데이터를 쓸 작업 준비 (저수준 포매팅, 논리적 포매팅)
파일 할당 방법: 연속 할당 불연속 할당 불연속 할당은 연결 할당과 색인 할당으로 나뉨
FAT파일시스템(FAT: 파일 할당 테이블) 을 이용하는 연결 할당 기반 파일 시스템 유닉스 파일 시스템: i-node 를 이용하는 색인할당 기반 파일 시스템
과제
p.400 1번
메모리 할당 방식에 대해 옳은 것을 보기에서 고르시오 보기) 최초 적합, 최적 적합, 최악 적합 1. 최초로 발견한 빈 공간에 프로세스를 적재 2. 적재될 수 있는 가장 큰 공간에 프로세스 적재 3. 적재될 수 있는 가장 작은 공간에 프로세스를 적재
답:
1 - 최초 적합
2 - 최악 적합
3 - 최적 적합
14 -3 LRU 교체 알고리즘 사용 시 페이지 폴트 발생 횟수
풀이:
우선 프레임은 세개 있습니다
최초 상태는 아래와 같다고 합시다
맞는 표현법인지 모르겠지만 간단하게 배열로 표현하겠습나다
0
{null, null, null}
아래의 페이지 참조열에 있는 페이지를 참조 하게 되면 (빨간색으로 표시한 부분이 페이지 폴트 발생한 구간입니다)
프레임에 없는 페이지에 접근 한 경우 가장 오래전에 들어온 페이지부터 내보내면서 수행하면 다음과 같이 진행 됩니다.
2 3 1 3 5 2 3 4 2 3
1
{2, null, null}
2
{2, 3, null}
3
{2, 3, 1}
4
{2, 3, 1}
5
{5, 3, 1}
6
{5, 3, 2}
7
{5, 3, 2}
8
{4, 3, 2}
9
{4, 3, 2}
10
{4, 3, 2}
페이지 폴트는 총 3번 발생했습니다.
답: 3
완주 기념 한빛 책 둘러보기
교보문고 랭킹기준으로 둘러보거나 검색해서 유용해 보이는 걸로 골랐습니다
실제 책 내용을 본게 아닌 목차를 보고 설명을 쓴거라 정확하진 않습니다.
책을 고르는데 과제보다 더 오래 걸린거같네요ㅠㅠ
<개발/ 프로그래밍> 1, Thinking About C++11 STL - C++ 표준라이브러리 STL 의 활용을 중점으로 다루고 있다 STL은 범용성이나 편리성 성능면에서 굉장히 뛰어나지만, 기능이 정말 많아서 다 알기는 힘든 면도 있다. 실무면에서도 많이 활용되므로 읽으면 도움될 것 같다
2. 이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접 - CS(컴퓨터과학)에 관련된 다양한 내용을 정리 해 놓았다 혼자공부하는 컴퓨터구조+운영체제에서도 나온 컴퓨터 구조 운영체제 관련 내용 및 네트워크, DB등에 대한 내용도 전체적으로 다 들어가 있다 제목은 기술 면접이라 되어 있지만 실무에서도 많이 도움이 된다고 생각한다
3. 실무로 통하는 클린코드 - 다양한 언어의 에제를 통해 클린코드 작성법을 소개한다. 주석 활용이나 변수명 정의 등 간단한 부분부터 리팩토링 같은 심화된 부분까지 고려 할수 있도록 정리되어있다
--- 전 참고로 저런걸 몰라서 신입사원일떄 학교에서 전공실습할때처럼
int a, b, c;
string s;
이런 변수 쓰다 쿠사리 먹었습니다...
<기타> 게임 전쟁 - 게임 산업의 역사와 2000년대 콘솔 황금기 시대적 양상 등에 대해 자세히 정리되어있다 게임은 항상 많은 관심을 받아왔고 인기도 높았으며 이에 따라 다양한 게임들이 개발되어왔다 과거에 게임은 단순 아이들용 놀이나 부정적으로는 게임중독같은 질병을 일으키는 것으로 여겨지기도 했다 지금은 작품성을 인정받는 게임들도 많고 하나의 문화 사업으로 받아들여진다
일단 Thinking About C++11 STL 부터 살 것 같습니다. 다른 책들도 유용할것 같고 게임 전쟁도 재밌어보이네요
교착 상태 예방: 교착상태 발생조건중 하나를 충족시키지못하게함 교착 상태 회피: 안전상태를 유지할수있는 경우만 자원할당 교착 상태 검출 후 회복:교착 상태 발생여부를 검사하고 발생 시 회복시킴
과제
p.363 1번 문제
다음 중 옳지 않은 것을 고르시오
1. 뮤텍스 락은 임계구역을 잠근 후 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룸 2. 세마포는 공유 자원이 여러 개 있는 상태에서도 사용 가능 3. 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화를 이룰 수 있음 4. 세마포를 이용하면 반드시 바쁜 대기를 해야 함
해설: 4. -> 사용 할 수 있는 자원이 없는 경우 세마포에서는 프로세스를 대기 상태로 만들고 해당 프로세스 PCB를 대기큐에 집어넣는다. 따라서 반드시 바쁜대기를 하지는 않음
답: 4
12 -1 임계 구역, 상호 배제 정리
임계 구역: 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 되는 코드 영역
상호 배제: 한 프로세스가 임계 구역에서 작업중인 경우 다른 프로세스가 임계구역에 들어가지 못하게 제어
임계 구역 문제를 해결 하기 위한 3가지 원칙
종류
설명
상호 배제
한 프로세스가 임계 구역에서 작업중인 경우 다른 프로세스가 임계구역에 들어가지 못함
진행
임계 구역에 진입한 프로세스가 없으면 임계 구역에 진입하고자 하는 프로세스는 들어갈수 있어야 함
사용자 영역: 프로그램이 동작하기 위해 사용되는 메모리공간으로 스택영역, 힙 영역, 데이터 영역, 코드 영역으로 이루어짐
사용자 인터페이스 (UI): 운영체제가 제공하는 서비스 중 하나(커널에는 포함안됨)
UI 의 종류
CLI(Command Line Interface): 입출력이 텍스트로 이루어지는 인터페이스 (cmd, dos 등)
GUI(Graphic User Interface): 그래픽 환경의 인터페이스
NUI(Natural User Interface) : 자연스러운 움직임을 통해 기기를 조작하는 인터페이스
이중 모드: 운영체제가 응용 프로그램이 자원에 접근하는 과정을 요청받으면 대신 수행
커널 모드: 커널 영역 코드 실행 가능 사용자 모드: 커널 영역 코드 실행 불가
커널 모드에서는 자원에 접근이 가능하다
시스템 콜: 프로그램이 자원에 접근 하기 위해서는 운영 체제에 요청을 보냄 시스템 콜을 통해 커널 모드로 전환되면 운영체제 서비스를 제공 받을 수 있음 시스템 호출은 소프트웨어 인터럽트임
시스템 콜 작동 과정 (사용자모드)시스템 호출을 발생 시킴 -> (커널모드)운영체제 코드 실행 -> (사용자모드) 시스템 호출 복귀
운영 체제의 핵심 서비스
프로세스 관리
자원접근 및 할당
파일 시스템 관리
CPU 스케줄링: 하나의 CPU는 한번에 하나의 프로세스만 할당 가능하므로 어떤 프로세스 부터, 얼마나 오래 할당할지 스케줄링 필요
가상머신: 소프트웨어적으로 만들어낸 가상컴퓨터 하이퍼바이저 모드: 가상머신을 위한 모드
가상 머신은 대표적으로 VMWare, Virtual Box 등이 있습니다.
Chapter 10: 프로세스와 스레드
프로세스: 메모리에 적재되어 실행되고있는 프로그램 포그라운드 프로세스: 사용자가 상호작용 할수 있으며 보이게 실행되고 있는 프로세스 백그라운드 프로세스: 보이지 않게 실행되고 있는 프로세스 사용자와 상호작용하지 않는 백그라운드 프로세스는 유닉스 계열에서는 데몬, 윈도우 계열에서는 서비스라고 지칭
PCB(프로세스제어 블록): 프로세스 관련 정보를 저장 하는 자료구조 PCB 에 담기는 정보
PID: 프로세스ID - 프로세스 식별번호
레지스터 값
프로세스 상태 정보
프로세스의 메모리 영역
코드영역
데이터 영역: 프로그램이 실행되는 동안 유지되는 데이터가 저장
힙 영역: 프로그래머가 직접 할당할수있는 메모리 공간으로 후에 반환해야함
스택 영역: 데이터를 일시 저장
변수의 종류 별 저장 영역
전역 변수: 데이터 영역
매개변수, 지역 변수: 스택 영역
정적 할당 영역과 동적 할당 영역
정적 할당 영역: 데이터 영역
동적 할당 영역: 스택 영역, 힙 영역
프로세스상태 다이어그램
1: 생성 / 2: 준비 / 3: 실행/ 4: 완료/ 5: 대기
디스패치: 프로세스가 준비상태에서 실행 상태로 전환
프로세스 계층 구조 부모 프로세스, 자식프로세스
자식 프로세스는 부모 프로세스로 부터 생성된 프로세스다.
부모 프로세스가 종료되면 자식 프로세스도 종료된다.
스레드: 프로세스를 구성하는 실행의 흐름 단위 단일 스레드 프로세스: 스레드를 하나 가지는 프로세스
멀티프로세스: 프로세스가 여러개 실행 됨
멀티스레드: 스레드를 여러 개 가지는 프로세스
스레드 끼리는 프로세스 내의 자원을 공유한다.
프로세스 간은 기본적으로 자원을 공유 하지 않음
IPC: 프로세스 간 데이터를 주고받음.
Chapter 11: CPU 스케줄링
CPU 스케줄링: 프로세스들에게 합리적으로 CPU자원을 배분
프로세스 우선순위
CPU 버스트: 프로세스가 실행 되는 동안 CPU에서 연산을 처리 하는 시간
입출력 버스트: 프로세스가 실행 되는 동안 I/O 장치에서 작업을 하는 시간
스케줄링 큐: CPU 할당을 위해 프로세스를 대기시키고 이를 스케줄링 큐로 관리한다.
준비 큐: CPU 를 이용햐야하는 프로세스들이 대기
대기 큐: I/O 장치를 이용해야 하는 프로세스들이 대기
스케줄링 기법
종류
설명
선입 선처리 스케줄링
준비 큐에 삽입된 순서 대로 할당
최단 작업 우선 스케줄링
CPU 사용 시간이 짧은 순으로 할당
라운드 로빈 스케줄링
정해진 시간만큼 돌아가며 CPU 할당
우선순위 스케줄링
가장 높은 우선순위 프로세스에 CPU 할당
다단계 피드백 큐 스케줄링
프로세스들이 큐 사이를 이동 할 수 있는 다단계 큐 스케줄링
과제
p,304 확인 문제 1번
프로세스 상태 구조도를 보고 빈칸에 알맞은 상태를 쓰시오
풀이
1: 시작하는 부분이므로 생성
2: 프로세스는 생성에서 준비 상태로 진입
3. 준비에서 실행 상태로 진입(디스패치)
4. 실행 후에 완료상태로 진입
5. 입출력 요청이 있으면 준비 상태로 진입, 완료 후에는 다시 준비 상태로 진입
정답
1: 생성
2. 준비
3: 실행
4. 완료
5. 대기
11-2 CPU 할당 순서
준비 큐에 A,B,C,D 순으로 삽입 되었을때 선입 선처리 알고리즘 적용 시 어떤 순서로 CPU를 할당받는가?
풍이
선입 선처리의 경우 무조건 먼저 삽입된 프로세스 부터 CPU를 할당한다. 따라서 A, B, C, D 순으로 프로세스를 할당 받는다