티스토리 뷰
운영체제
운영체제는 CPU스케쥴링, 동기화 교착상태, 메모리관리 입출력시스템, 파일시스템 목차가 대충 이렇게 구성되는데,
운영체제 단골 질문 프로세스와 스레드만 한번 정리하면,
프로세스는 실행 중인 프로그램의 인스턴스고, 스레드는 프로세스 안에 있는 경량 프로세스.
둘의 차이를 설명하라고 하면, 프로세스는 독립적인 메모리 공간을 갖고 있지만, 스레드는 같은 프로세스 안에서 자원을 공유한다는 거 말하면 되고, 그러니까 프로세는 죽어도 다른 프로세스에 영향을 미치지 않지만, 스레드에서 문제가 생기면, 같은 자원을 공유해서 사용하고 있는 다른 스레드도 영향이 간다는거.
뭐 이제 여기서.. 자원 공유 넘어서서 동시성처리에 대해 물어볼 수도 있음. 공유자원 동기화 관련된 문제, 운영체제 교착상태 관련 문제 물어볼 수 있음.
교착 상태는 자원이 한번에 하나의 프로세스에만 할당되고, 그자원을 강제로 뺏을 수가 없고, 그 자원을 점유하고 있는 프로세스가 있으면 기다리는데, 이게 반대쪽으로도 마찬가지인 상황. 순환적으로 자원을 기다리고 있는 상황이고,
이런 상황에서는..... 타임아웃 초과하면 자원 점유하던거 해제하거나, 아니면 자원요청에 대한 타임아웃을 줘서 시간 초과하면 요청 취소하고 프로세스 재시작한다거나, 아니면 교착상태를 미리 탐지해서 방지하거나
같이 세마포어랑 뮤텍스도 물어볼 수 있음. 둘다 공유 자원에 대한 접근을 제한하는 건데, 뮤텍스는 이진세마포어라고 보면됨. lock이랑 unlock.으로 구분해서 lock이면 기다리고, 해당 자원 다쓰면 unlock으로 바뀌고, 다른 스레드가 접근할 수 있고, 뮤텍스는 단일자원에 대한 단일접근임.
세마포어는 특정 수의 자원에 대한 접근을 제어하는 거. 자원할당되면 세마포어 카운터 줄이고, 세마포어 카운터 0보다 작으면 대기하고, 자원 다 사용하면 세마포어 카운터 다시 증가시키고 기다리고 있는 거 깨우고,
아무튼 세마포어는 자원에 대한 접근을 제어하는 거고, 뮤텍스는 단일자원에 단독접근하는 거를 보장하는거고,
이정도가 운영체제 관련 물어볼만한 거.. 이게 그나마 웹 프로그래밍 하면서 운영체제 관련 마주할 수 있는 문제인듯..
그런데.. nodejs는. 싱글스레드라 세마포어나 뮤텍스 같은거 신경쓸 일이 없는데, 비동기코드로 동시성을 구현하기때문에.. 그때는 좀 신경써줘야함. 광고서비스 작업할때. lobster에 한번에 3개만 요청이 가능했는데, 워커풀이랑 대기큐 만들어서 해결했음.
싱글스레드이긴 한데 worker-threads 모듈 쓰면 병렬작업 수행할 수 있고
child_process 모듈 쓰면 여러 프로세스 생성할 수 있고,. IPC로 프로세스간 통신하는데, 내 경험치에 의하면.. node 안에 ipc 관련 모듈 써서 구현하는거보다, redis pubsub 이나 메시지 큐 같은거 써서 프로세스 간 통신하는게 훨씬 깔끔하고 쉬움..
싱글스레드에서 비동기 작업하는거 물어볼 수도 있는데? 이벤트 루프는 비동기작업을 백그라운드에서 처리하고, 작업 끝나면 콜백 큐에 반환해서 순차적으로 처리. 그러니까 promise.all 로 실행하면 뭔가 동시에 실행시키는 느낌인데, 사실은. 동시에 시작되는 거는 아님.
이제 Node.js "싱글 스레드 이벤트루프 기반의" 까지는 설명했고. 논블로킹 IO 에 대해 설명하면.
IO 작업이 비동기적으로 처리되어서, IO작업을 시작하면 그 결과가 나올 때까지 기다리지 않는 다는 거임. 바로 다음 작업을 시작함. 비동기 함수는 보통 콜백을 인자로 받아서 작업이 완료되면 이 콜백을 호출함. 이벤트 루프가 메인 쓰레드에서 계속 동작하면서 비동기 작업 완료되면 콜백함수 호출함. ===> 이게 작업의 완료를 기다리는 동안 다른 작업을 처리할 수 있게 도와서 응답성? 이 좋아짐. async/await로 비동기 함수를 좀 쉽게 처리할 수 있음. async/await로 비동기 코드가 동기적으로 보이게 만듦. 해당 비동기 작업이 완료될 때까지 wait 해서 다음 코드로 진행이 안됨.
운영체제 정리하다가 이상한 방향으로 빠졌는데, 대충 면접시간 동안 대답을 들을만한 운영체제에 대한 질문은 프로세스,스레드, 동기화, 교착상태 이정도 인거 같으니까 이정도로 마무리하고 이제 데이터베이스, 네트워크, 자료구조, 알고리즘 정도 정리해보면 될듯. 도커같은거 물어볼 수도 있음.
- Total
- Today
- Yesterday
- 면접비
- DB 생성
- 다이나믹프로그래밍
- 로드나인
- 서버개발
- 롱베케이션
- 면접질문
- 최소공통조상
- 은둔청년체험
- MySQL
- 동적프로그래밍
- 투포인터
- node.js
- 투포인터 연습
- BFS
- MOD
- 그래프
- create db
- 다이나밍프로그래밍
- 개발자면접
- 서버점검
- create databases;
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |