운영체제 19

동기화 문제 해결책(1)

Lock이 무엇인가요?? 말 그대로, 걸어 잠구는 행위입니다. 내가 자원을 사용하고 있는 동안에 문을 걸어 잠궈서 나 말고는 아무도 못들어오게 하는 방식입니다. 이를 통해 동시접근 문제가 발생하지 않습니다. Lock 함수의 구현 struct lock { int held = 0; }; void lock(struct lock *l) { while (l -> held); l -> held = 1; } void unlock(struct lock &l) { l -> held = 0; } 설명) 누군가 자원을 잡고 있으면 처음엔 held가 0이기 때문에 바로 빠져나오고 held가 1이 됩니다. 그리고 누군가 들어오면 held가 1이라서 무한 루프를 빙빙 돌다가 unlock이 다른 프로세스나 스레드에 의해 실행되면 ..

운영체제 2021.08.09

프로세스 동기화

동시에 실행되는 프로세스들이 공유된 데이터를 사용할 때는 데이터 불일치가 일어나나요?? 네. 그래서 프로세스 순서대로 실행 될 수 있게 해줘야 데이터 일관성이 유지됩니다. 왜 데이터 불일치가 일어날까요?? Concurrent하게 실행되는 경우에 어떤 프로세스가 언제 어디서나 컨텍스트 스위칭이 된다면 명령에 흐름이 어디서 끝날지 모릅니다. 다음 프로세스로 교체되어 실행하다보면 공유하는 데이터에 접근하여 데이터에 문제가 발생합니다. 예를 들어 count 변수가 5인데 A프로세스에서 count변수를 증가시키고 B프로세스에서 count변수를 감소시킨다고하면 concurrent하게 실행되면 0이라고 생각할 것 같지만 -1, 0, 1, 맘대로 나올 수도 있습니다. 간단하게 프로그래밍 언어로 보게 되면 count++..

운영체제 2021.08.09

CPU 스케줄링

CPU 스케줄링을 왜 필요할까요?? 멀티 프로그래밍 동시에 프로세스를 사용하기 위해서 필요합니다. 동시에 실행하려는 목적은 CPU가 속도가 굉장히 빨라서 놀고 있기에 컨텍스트 스위칭을 하여 나눠서 시분할을 하여 CPU의 이용효율성을 높이기 위해서입니다. CPU 스케줄링은 메모리에 로드되어 있는 프로세스 중에서 어떤 프로세스에게 CPU을 할당해줄 것인지 결정하는 것이 CPU스케줄링입니다. 그럼 어떤 프로세스에게 할당할지 결정하나요?? 어떤 프로세스를 선택할지는 여러 스케줄링 기법이 존재합니다. Preemptive와 Non-Preemptive의 차이점을 아시나요?? Non-Preemptive은 비선점형으로 CPU를 프로세스가 선점하게되면 프로세스가 자발적으로 나오거나 프로세스가 종료되는 경우입니다. 즉, 프..

운영체제 2021.08.09

쓰레드(2)

멀티코어 프로세서 및 멀티쓰레드 멀티코어 프로세서는 운영체제에서 각각의 코어를 하나의 프로세서로 인식하고 스케줄링하며, 각각의 코어에 쓰레드를 할당하여 수행합니다. 멀티 코어 시스템에서는 캐시를 공유하기 때문에 data, code 등 프로세스의 자원을 공유하는 멀티쓰레드을 효과적으로 수행할 수 있습니다. 멀티쓰레드의 장점은?? 응답성 싱글 쓰레드에서, 수행 중이던 쓰레드가 입출력으로 인해 block 된다면 프로세스 전체가 block 될 것입니다. 멀티 쓰레드에서는, 하나의 쓰레드가 block되거나 시간이 걸리는 작업을 하더라도, 다른 쓰레드들은 실행되고 있기에 사용자 입장 에서는 interactive합니다. 자원공유 쓰레드들 간에는 프로세스의 메모리 및 다른 자원들은 공유합니다. 경제성 fork() 시스..

운영체제 2021.08.08

쓰레드(1)

프로세스에 대해 설명해주세요. 프로세스는 스케줄링의 단위이며, 소유하고 있는 자원에 대한 보호를 이루어지는 Protection domain으로 볼 수 있습니다. 프로세스 간의 메모리는 독립적이며, 서로의 영역에 접근이 어렵습니다. 프로세스는 하나의 실행 흐름을 가지고 실행 중인 프로그램입니다. 단점으로는 스위칭 비용이 상대적으로 큽니다. 쓰레드의 동기가 무엇일까요?? 프로세스의 한계 때문입니다. 하나의 프로세스에는 하나의 컨트롤만이 존재하기 때문에, 프로세스는 한 번에 하나의 일만 처리할 수 있습니다. 프로세스에서 할 작업을 여러 개로 나눈 후에, 각각을 쓰레드화 한다면 병렬적으로 작업을 완수할 수 있을 것입니다. 쓰레드는 무엇인데요?? 프로세스와 마찬가지로 스케줄링의 단위입니다. 프로세스 보다 작은 단..

운영체제 2021.08.08

프로세스 간 통신(IPC)

동시에 실행되는 프로세스는 독립적 or 협력적하며 진행할 수 있습니다. 프로세스가 독립적이다라는 것은 무슨 의미인가요? 공유하는 데이터도 없고 프로세스끼리 메시지 주고 받는 것도 없이 자신의 프로세스만 진행하게 되는 것입니다. 프로세스가 협력적이다라는 것은 무슨 의미인가요? 영향을 주거나 영향을 받거나 하는 일이 발생됩니다. 어떤 프로세스가 데이터를 공유하거나 메시지를 주고받을 수 있습니다. 프로세스 협력 모델을 구현하기 위해서는 IPC가 반드시 필요합니다. IPC가 뭔데요? Inter Process Communication으로 프로세스끼리 통신하는 것입니다. 프로세스들 간에 데이터 및 정보를 주고 받기 위한 매커니즘입니다. IPC에는 2가지 모델이 존재하는데 shared memory, message p..

운영체제 2021.08.08

프로세스의 이해

프로세스란?? 프로세스는 실행 중인 프로그램입니다. 운영체제의 작업의 단위라고도 불립니다. 프로세스가 실행되기 위해선 자원이 필요합니다. CPU를 쓸 수 있어야 하며, 메모리에 올라가야 하며, 파일이나 I/O 장치들의 관리할 수 있어야 합니다. 프로세스의 계층은 어떻게 되나요?? 코드: 실행 가능한 코드 데이터 : 전역 변수들을 저장할 수 있는 부분 힙 : 프로그램 실행 동안, 동적 메모리를 할당 받는 부분 스택 : 함수 호출했을 때 쌓이거나, 지역 변수, 주소 등이 저장되는 부분 Segmentation fault가 먼지 알아요?? 잘못된 메모리참조 때문에 발생합니다. 주로 null pointer를 통해 접근하는 경우 발생합니다. 즉, 주소 0에 접근을 시도하는 경우입니다. Red zone이라고 아시나요..

운영체제 2021.08.06

운영체제의 개념과 구조

운영체제가 무엇이고 뭔 일을 하나요? 운영체제는 컴퓨터 하드웨어를 관리하는 소프트웨어입니다. 운영체제는 애플리케이션 프로그램하고 컴퓨터 유저하고 컴퓨터 하드웨어 간의 중간 매개체 역할을 해줍니다. 크게 하드웨어, 운영체제, 애플리케이션 프로그램, 유저 관계를 보게되면, 컴퓨터 하드웨어에 추상적인 계층(운영체제)이 있으며 시스템과 애플리케이션 프로그래밍할 때 운영체제와 통신을 하면 하드웨어에 투명하게 프로그래밍할 수 있습니다. 운영체제의 개념 항상 상주하고 있는 프로그램이 운영체제이며, 가장 핵심은 커널입니다. 커널에서, 시스템 프로그램과 애플리케이션 프로그램에 대한 인터페이스를 제공해줍니다. 현대 컴퓨터 시스템 CPU, 여러 개의 디바이스 컨트롤러와 공통 버스를 통해 연결되어 있습니다. BootStrap..

운영체제 2021.08.06

운영체제가 뭔가요?

취업 준비를 위하여 정리하는 운영체제 글입니다. 학기 중에 막연히 배우고 까먹고 잊어버리는 내용을 복기하여 나의 것으로 만드는 것이 목표입니다. 운영체제가 뭔가요? 운영체제는 우리가 알고 있다 싶이 window 10, linux, max os 등이 있습니다. 명확하게 말하자면, 컴퓨터 시스템을 운영하는 소프트웨어라고 합니다. 그럼 컴퓨터가 무엇일까요? 우리가 사용하는 스마트폰은 흔히 컴퓨터라고 할 수 있지만, 계산기는 컴퓨터라고 할 수 있을까요? 컴퓨터는 정보를 처리하는 기계입니다. 정보는 불확실한 상황을 측정해서 수치적으로 표현하는 것입니다. 그럼 컴퓨터가 정보를 어떻게 처리하죠?? 정보의 최소 단위는 bit(binary digit)이 됩니다. 정보의 상태를 변환할 수 있어야 합니다. 0에서 1로 / ..

운영체제 2021.08.06