Program ganda atau tata olah ganda (Inggris: multi-programs) adalah salah satu teknik penjadwalan di mana tugas (task) yang sedang berjalan tetap berjalan sampai ia melakukan operasi yang membutuhkan waktu untuk menunggu respon dari luar (external event), misalnya membaca data dari disket/CD/dsb, atau sampai komputer memaksa untuk menukar tugas yang sedang berjalan dengan tugas lainnya. Sistem operasi yang menggunakan tata olah ganda sebagai penjadwalnya bertujuan untuk memaksimalkan penggunaan Central Prosessing Unit.

Pada masa-masa awal dunia perkomputeran, CPU cukup mahal dan peripheral sangat lamban. Saat komputer menjalankan sebuah tata olah yang membutuhkan akses ke peripheral, CPU harus menghentikan instruksi-instruksi tata olah lainnya selama peripheral mengolah data. Hal ini dianggap sangat tidak efisien.

Usaha pertama untuk membuat sistem operasi berdasar tata olah ganda dilakukan pada tahun 1960-an. Beberapa tata olah yang berlainan di dalam tumpak dimuat ke memori komputer, dan tata olah yang pertama akan dijalankan. Saat tata olah tersebut mencapai instruksi untuk menunggu akses ke peripheral, konteks dari tata olah ini disimpan, dan tata olah berikutnya di memori mulai dijalankan. Proses ini berulang terus sampai semua tata olah selesai dijalankan.

Tata olah ganda tidak memberi garansi bahwa tata-tata olah akan berjalan bersamaan. Bisa saja tata olah pertama yang dijalankan tidak membutuhkan akses ke peripheral sehingga tata olah tersebut berjalan terus berjam-jam. Namun penataolahan ganda cukup mengurangi waktu pengguna untuk menunggu karena pengguna tinggal memasukkan sederet tata olah ke komputer dan kembali beberapa jam kemudian untuk melihat hasilnya.

Primary Control Program (PCP) pada OS/360 versi awal menggunakan sistem penataolahan ganda seperti yang disebut tadi, namun kemudian diganti pada tahun berikutnya oleh MFT dengan sistem tata olah ganda yang membatasi waktu proses bagi CPU sebelum mengganti dengan proses lainnya.