# chitsanuphong628/os_ck architecture

> Architecture diagram of the GitHub repository chitsanuphong628/os_ck, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/chitsanuphong628/os_ck
- Repository: https://github.com/chitsanuphong628/os_ck

## Overview

OS_CK is a multi-client cinema-seat reservation system: clients issue LIST, STATUS, RESERVE, and CANCEL commands through a shared System V message queue, and the server returns client-specific responses. The server’s worker threads process requests against an in-memory seat table; optional mutex protection guards reservation changes, while reads are also locked. The README documents race-condition experiments, but those scripts and logs are not runtime components. The graph follows the sampled client and server code; unsampled experiment wiring is omitted.

Main entry points: [`server.cpp`](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp) (Worker dispatch), [`client.cpp`](https://github.com/chitsanuphong628/os_ck/blob/main/client.cpp) (Interactive client), [`common.h`](https://github.com/chitsanuphong628/os_ck/blob/main/common.h) (Message contract)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client_side["Client interface"]
  node_client["Interactive client<br/>[client.cpp]"]
end

subgraph group_messaging["Message transport"]
  node_protocol["Message contract<br/>[common.h]"]
  node_queue["System V queue"]
end

subgraph group_server_runtime["Server runtime"]
  node_server_start["Server startup<br/>[server.cpp]"]
  node_workers["Worker dispatch<br/>[server.cpp]"]
  node_cleanup["Queue cleanup<br/>[server.cpp]"]
end

subgraph group_reservation_domain["Reservation domain"]
  node_reserve_cancel["Reserve and cancel<br/>[server.cpp]"]
  node_queries["Seat queries<br/>[server.cpp]"]
  node_seat_table["Seat state<br/>[server.cpp]"]
  node_table_mutex["Table mutex<br/>[server.cpp]"]
end

node_user(("Client user"))

node_user -->|"enters commands"| node_client
node_client -->|"formats requests"| node_protocol
node_client -->|"sends requests"| node_queue
node_queue -->|"delivers requests"| node_workers
node_workers -->|"dispatches changes"| node_reserve_cancel
node_workers -->|"dispatches queries"| node_queries
node_reserve_cancel -->|"reads and updates"| node_seat_table
node_queries -->|"reads"| node_seat_table
node_reserve_cancel -.->|"locks optionally"| node_table_mutex
node_queries -->|"locks reads"| node_table_mutex
node_workers -->|"sends responses"| node_queue
node_queue -->|"delivers responses"| node_client
node_server_start -->|"creates queue"| node_queue
node_server_start -->|"starts workers"| node_workers
node_cleanup -->|"removes queue"| node_queue

click node_client "https://github.com/chitsanuphong628/os_ck/blob/main/client.cpp"
click node_protocol "https://github.com/chitsanuphong628/os_ck/blob/main/common.h"
click node_server_start "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"
click node_workers "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"
click node_cleanup "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"
click node_reserve_cancel "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"
click node_queries "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"
click node_seat_table "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"
click node_table_mutex "https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client,node_user toneBlue
class node_protocol,node_queue toneAmber
class node_server_start,node_workers,node_cleanup toneMint
class node_reserve_cancel,node_queries,node_seat_table,node_table_mutex toneRose
```

## Components

### Client interface

- [Interactive client](https://github.com/chitsanuphong628/os_ck/blob/main/client.cpp): `client.cpp`

### Message transport

- [Message contract](https://github.com/chitsanuphong628/os_ck/blob/main/common.h): `common.h`
- **System V queue**

### Server runtime

- [Server startup](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`
- [Worker dispatch](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`
- [Queue cleanup](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`

### Reservation domain

- [Reserve and cancel](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`
- [Seat queries](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`
- [Seat state](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`
- [Table mutex](https://github.com/chitsanuphong628/os_ck/blob/main/server.cpp): `server.cpp`

### Other components

- **Client user**

## Connections

- Client user → Interactive client: enters commands
- Interactive client → Message contract: formats requests
- Interactive client → System V queue: sends requests
- System V queue → Worker dispatch: delivers requests
- Worker dispatch → Reserve and cancel: dispatches changes
- Worker dispatch → Seat queries: dispatches queries
- Reserve and cancel → Seat state: reads and updates
- Seat queries → Seat state: reads
- Reserve and cancel → Table mutex: locks optionally
- Seat queries → Table mutex: locks reads
- Worker dispatch → System V queue: sends responses
- System V queue → Interactive client: delivers responses
- Server startup → System V queue: creates queue
- Server startup → Worker dispatch: starts workers
- Queue cleanup → System V queue: removes queue
