ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 질문 정리 ( 프로세스 vs 스레드 / 스택 vs 큐 / 코드영역 ... )
    면접 준비/컴퓨터구조 2018. 11. 20. 17:36



    1. 프로세스 vs 스레드


    프로세스

    운영체제로부터 자원을 할당받는 작업의 단위 -> 메모리, 주소공간을 할당

    스레드

    프로세스가 할당받은 자원을 이용하는 실행의 단위 -> 내부 스레드끼리 할당받은 자원들을 공유하면서 실행


    ※ 스레드를 사용하는 이유 : 운영체제에서 더 효율적으로 시스템 자원을 관리하기 위해 사용된다. 

    멀티 프로세스로 진행되는 작업을 멀티 스레드로 수행하게 되면 시스템 콜이 줄어들기 때문에 효율적으로 자원을 관리할 수 있고, 통신 비용 또한 적다.


    ※ 스레드간의 자원공유는 전역변수를 이용하므로 동기화 문제에 신경을 써야한다.


    2. 스택 vs 큐


    스택(stack) : 

    LIFO(Last In First Out)구조, 가장 나중에 쌓인 데이터가 가장 먼저 출력을 하게 된다.

    TOP - stack의 맨위의 데이터를 가리킴

    POP - stack에 있는 데이터를 삭제하기 위한 함수

    PUSH - 데이터를 넣는 함수

    큐(queue) : 

    FIFO(First in First Out)구조, 가장 먼저 들어간 데이터가 가장 먼저 출력을 하게 된다.

    FRONT - queue에서 삭제가 일어나는 위치를 가리킴

    REAR - queue에서 삽입이 일어나는 위치를 가리킴

    Dequeue - queue에 있는 데이터를 삭제하기 위한 함수 -> queue가 비어있을 경우 삭제한다면 Queue underflow가 발생하게 된다.

    Enqueue - 데이터를 넣는 함수 -> queue가 꽉 차있을 경우 삽입하려면 Queue overflow가 발생하게 된다.

    1) 선형 큐 2) 원형 큐 


    ※ 덱(deque) : 자료의 입력과 출력을 양 쪽 끝에서 가능하게 하는 자료구조 (이건 사실 잘모르겟.....)


    3. 코드 영역 vs 힙 영역 vs 스택 영역 vs 데이터 영역


    프로그램을 실행시키면 운영체제는 프로그램을 위해 메모리(RAM) 공간을 할당해준다.

    할당되는 메모리 공간은 크게 스택(Stack), 힙(Heap), 데이터(Data) 영역으로 나뉘어진다.


    적는대로 순서가 된다.

    먼저 


    1) 코드(Code) 영역 : 실행할 프로그램의 코드가 저장되는 영역으로 CPU가 코드영역에 저장된 명령어를 하나씩 가져가며 처리한다.


    2) 데이터(Data) 영역 : 전역변수와 static 변수가 할당되는 영역으로 프로그램이 시작하면 할당되고, 프로그램이 종료되면 소멸된다.

    main 함수가 호출되기 전에 데이터 영역에 할당 된다. 그래서 프로그램이 종료될 때 가지 메모리 상에 존재하는 것.


    3) 힙(Heap) 영역 : 사용자가 필요에 의해 동적으로 메모리를 할당할 때 사용한다.

    Q. 힙 영역이 필요한 이유는? - 동적 할당으로 사용하기 위함

    프로그램이 실행되는 동안 메모리의 크기를 결정해야하는 경우가 있기 때문이다.


    4) 스택(Stack) 영역 : 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역으로 함수 호출이 완료되면 사라진다.







Designed by Tistory.