inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[워밍업클럽3기] CS전공지식 2주차

SuHyun Jeong
0

기본편 - Section 03 알고리즘

재귀 (recursion)

콜스택

재귀함수는, 호출할 때마다 콜스택영역을 차지함

재귀함수: 나 자신을 호출, 구현할때는 이미 구현된 것을 부르는 것처럼 구현하면 쉬움

 

재귀적으로 생각하기

  1. pattern 01:

    단순 반복실행

    1. 반복문으로 구현했을때보다 성능이 떨어짐

  2. pattern 02:

    하위 문제 결과를 기반으로 현재문제 계산

    1. 팩토리얼을 예를 들으면, return number*factorial(number -1);여기에서 하위문제(=factorial(number-1);)를 기반으로, 현재문제(number*factorial(number-1);)를 해결함

    2. for문이용은 상향식 계산, 재귀함수를 이용하는 것은 하향식 계산

      1. 모든 재귀가 하향식은 아님

상향식: for문, 재귀함수 구현가능

(상향식에서 재귀함수는 매리트없음)

하향식: only 재귀함수만 가능

 

재귀 - 하노이탑

버블정렬(Bubble sort)

버블정렬의 성능

버블 정렬의 장단점

  1. 장점: 이해와 구현이 간단함

  1. 단점: 성능이 O(n^2)으로 좋지만은 않음.

 

선택정렬(Selection Sort)

선택정렬의 성능

선택정렬의 장단점은 버블정렬의 장단점과 동일함.

그림으로 배우는 운영체제 Section 04

프로세스간 통신

공유자원: 프로세스가 통신할때 공동으로 이용하는 파일이나 변수

세마포어: 상호배제 메커니즘 중 한가지

 

모니터: 세마포어의 단점을 해결하기 위한 상호배제메카니점

Section 05

 데드락(교착상태)

교착상태 해결

교착상태 검출 방법

  1. 가벼운 교착상태 검출: 타이머이용

    1. 일정시간동안 프로세스가 일을 안함 = 교착상태

    2. 해결법: 중간저장해서 교착상태되면 중간저장한데로 가는것

  2. 무거운 교착상태 검출: 자원할당 그래프 이용

    1. 운영체제가 어떠한 자원을 프로세스가 사용하는지 관찰

    2. 순환구조가 생기는 그래프 = 교착상태

    3. 교착상태 발생 -> 강제종료

    4. 강제 종료된 프로세스를 체크포인트에서 롤업

    5. 오버헤드가 발생하기도함.

 

Section 06

컴파일과 프로세스

<컴파일 과정>

test.c: 개발자가 C언어로 코딩함.

전처리기: 개발자 코딩보고, 전처리부분(C언어에서 #부분)을 코드에 치환시킨 후 주석제거

test.i: 전처리 된것 저장

컴파일러: C언어 파일을 어셈블리어로 저장함.

test.s: 어셈블리어 파일

어셈블러: 어셈블리어를 오브젝트 파일로 변환

test.o: 0과 1로 된 기계어로 구성된 오브젝트 파일 (코드영역과 데이터 영역이 나누어있음)

링커: 오브젝트 파일을 실행파일로 변환.

test.exe: 운영체제가 프로세스를 만들어줌. 완벽한 상태의 코드영역과 데이터 영역으로 나누어짐.

이후...

운영체제 ->exe파일의 코드영역과 데이터영역을 프로세스의 코드영역과 데이터영역에 넣어줌-> 빈상태의 스택과 힙을 할당 ->PCB를 만들어 관리가 가능하게 만들어줌 -> 프로그램 카운터(다음 실행할 명령어의 주소를 생성한 프로세스의 코드를 첫번째 주소로 설정) -> CPU 스케줄링에 맞추어 프로세스 실행후 작업을 마침

Section 07

메모리의 종류 (1번이 가장 속도가 빠르고 용량이 작으며 비쌈)

  1. 레지스터: 가장빠른 기억장소, CPU내에 존재

    1. 휘발성 메모리

    2. 레지스터의 크기= 32bit, 64 bit

    3. 메인메모리의 값을 레지스터로 가져와 계산 후 메인 메모리로 옮김

  2. 캐시: 메인메모리에서 레지스터로 옮길때 미리 가져오는 데이터를 캐시에 옮겨둔다.

    1. 캐시는 여러개를 둠. 가장 빠른 캐시 = L1.

  3. RAM(매인 메모리): 실제 운영체제와 여러 프로세스를 사용

    1. 실행중인 프로그램만 돌림

  4. 보조저장장치(HDD, SSD)

    1. 비휘발성 메모리

       

메인메모리

운영체제 : 1바이트 크기의 주소를 만들어 관리

32bit= 레지스터, ALU, 데이터 이동버스 , 사용가능 메모리도 2^34=4Gb

64bit = 레지스터, ALU, 데이터 이동버스, 사용가능 메모리는 2^64로 거의 무한대

즉, 32bit보다 64bit ram이 더빠름

 

메모리에는 운영체제 영역이 따로있음.

절대주소: 실제 프로그램이 올라가는 주소, 물리 주소공간이라고도함.

상대주소: 사용자가 바라보는 주소, 논리 주소라고 하기도함.

메모리 할당방식

메모리보다 더큰 프로그램은!!!

멀티 프로그램 환경에서는,

  1. 가변분할 방식 사용

    1. 프로세스 크기에 따라 메모리는 나눔

    2. 한프로세스가 메모리의 연속된 공간에 할당: 연속 메모리 할당

    3. 단점: 외부단편화 발생

    4. 장점: 빈공간 없음.

  2. 고정 분할 방식

    1. 프로세스 크기 상관없이 메모리 나눔

       

    2. 비연속 메모리할당: 메모리가 잘라서 나누어 들어가기도 하기때문

    3. 장점: 구현이 간단하고 오버헤드가 적음

    4. 단점: 내부단편화 발생

외부단편화

내부단편화

버디시스템

 

2주차 후 소감...

확실히, 한글로 배우니까 너무 좋음.

자세히 그림으로 설명해주시는것도 너무 좋음...

이해 쏙쏙되어서 너무 좋다.

학기 시작할때 알고 시작했으면 더 좋았을걸 하는 아쉬움

남은 2주 화이팅 :)

cs 전공지식

답변 0